问题 成功的有效访问令牌何时不返回结果并返回无效?

已加入
2018年9月26日
留言内容
22
编程经验
3-5
在访问令牌无效的情况下,我在asp.net core 2.2中使用中间件验证令牌,无效的返回消息无效,这种情况下可以正常工作

问题是当有效令牌成功时出现的问题是下一个请求,没有给我执行操作的结果,以便我为该工作做些什么

问题是,当成功的有效令牌正常时,它会到达下一个,但是在产生结果的操作之后不显示

在两种情况下,如果有效令牌无效,则返回无效令牌消息

我尝试过的

C#:
public async Task InvokeAsync(HttpContext context, DataContext dataContext)
        {
            var validKey = false;
            // than you logic to validate token          
            var CheckExistAccessToken = context.Request.Headers.ContainsKey("Authorization");
            var AccessTokenValue = context.Request.Headers["Authorization"].SingleOrDefault();
            //var token = AccessTokenValue.Substring(AccessTokenValue.IndexOf(' ') + 1);
            if (CheckExistAccessToken)
            {
                bool isvalid = _tockenvalidator.ValidateToken(AccessTokenValue);
                if (isvalid)
                {
                    validKey = true;
                }
                else
                {
                    validKey = false;
                }
                }
            if (!validKey)
            {
                context.Response.StatusCode = (int)HttpStatusCode.Forbidden;
                await context.Response.WriteAsync("Invalid Token");
            }
            //if valid than next middleware Invoke
            else
            {
                await _next.Invoke(context);
// not return to me action i write on postman and return also message not valid token
            }
        }
    }
public static class TokenExtensions
    {
        public static IApplicationBuilder UseTokenAuth(this IApplicationBuilder builder)
        {
              return builder.UseMiddleware<TokenValidateMiddleware>();
        }
    }
在配置startup.cs时

C#:
if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see Enforce HTTPS in ASP.NET Core.
                app.UseHsts();
            }
            app.UseTokenAuth();
            app.UseHttpsRedirection();
            app.UseStatusCodePagesWithReExecute("/error/{0}");
            app.UseMvc();
            app.UseCors("CorsData");
            app.UseStaticFiles();
            app.UseDefaultFiles();
 
由主持人最后编辑:

跳伞者

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
与您的问题无关,但将有助于使代码更清晰:更改:
C#:
bool isvalid = _tockenvalidator.ValidateToken(AccessTokenValue);
if (isvalid)
{
    validKey = true;
}
else
{
    validKey = false;
}

C#:
validKey = _tockenvalidator.ValidateToken(AccessTokenValue);

现在关于您的问题。如果将第28行从以下位置更改会发生什么:
C#:
await _next.Invoke(context);

C#:
await _next.Invoke(context).ConfigureAwait(false);
当心这是 只是一个hack on the same scale as the VB6 of just throwing in a DoEvents(). You really should understand what is causing the deadlock and work to prevent the deadlock from happening in the first place.
(一个很好的参考阅读: 不要阻塞异步代码 )
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,979
地点
英国
编程经验
10+

跳伞者

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
我还没有看过较新的回复。我已经阅读了他对经典WebAPI和MVC的较早答复,其中使用未绑定到同步上下文可能会影响ASP.NET使用的可用线程池。看到更新的响应,看起来就像更新的.NET Core 甚至没有同步上下文。所以是的,在ASP.NET Core中,这将是多余的(或者更多是无操作的)。

无论如何,因为您正在使用OP。 NET Core,并且没有一种容易使用的方法来打破看似死锁的状态,因此,OP没有办法只能在调试器获得挂起行为时闯入调试器,并尝试检查每个线程的调用堆栈以查看其是否具有某些死锁导致死锁的一种循环依赖。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,979
地点
英国
编程经验
10+
Yes, I've seen that one too. However, just because ConfigureAwait(false) has had the plug pulled by the ASP Core dev team, it is still recommended to use ConfigureAwait(false) in library projects fully supported by DotNet 4.6 independently etc but not in MVC/ASP since Microsoft have ditched context.
 
Last edited:

跳伞者

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
看来艾哈迈德(Ahmed)陷入了绝望,并向多个站点发送了相同问题的垃圾邮件:
堆栈溢出
ASP.NET
CSharp角
代码项目
DreamInCode

@ahmed: From what I can see, TokenValidateMiddleware is custom code you've written. Can you share the code with us? Perhaps the source of the deadlock is present there?
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,979
地点
英国
编程经验
10+
最佳 底部