【问题标题】:NancyFX error when doing per-route authentication in async route handler在异步路由处理程序中执行每个路由身份验证时出现 NancyFX 错误
【发布时间】:2015-04-06 12:20:38
【问题描述】:

当我尝试异步处理路由并在该路由中进行身份验证时,Nancy 会抛出 RouteExecutionEarlyExitException,然后返回状态代码 500(内部服务器错误)而不是 401(未授权)。

我的路由处理程序大致如下:

Get["route/to/private/stuff", true] = async (args, ct) =>
{
    this.RequiresAuthentication()
    // process request
}

我按照here 的指导方针配置了无状态身份验证。

当我的路由处理程序如下所示时,它按预期工作(内部抛出异常,但返回 401):

Get["route/to/private/stuff"] = args =>
{
    this.RequiresAuthentication()
    // process request
}

如何让 Nancy 在具有每个路由身份验证的异步路由处理程序中返回 401? 我正在使用 Nancy 1.0.0。

【问题讨论】:

    标签: c# authentication asynchronous nancy


    【解决方案1】:

    好的,现在我明白了。不幸的是,我提供的信息太少。 我对我如何处理请求不太诚实。当同步抛出 RouteExecutionEarlyExitException 时,Nancy 以 500 而不是 401 失败,如下所示:

    Get["/", true] = (args, ct) =>
    {
        this.RequiresAuthentication();
        return Task.FromResult((object) "Hello World!");
    };
    

    当 Nancy 在调用路由处理程序时使用await(即await handler(args, ct))时不会发生这种情况,但在同步调用处理程序时(即handler(args, ct).ContinueWith(...))可能会发生这种情况。 而it seems,因为 Nancy 使用的是后一种方法。

    因此解决方案是要么坚持使用async 修饰符,要么确保仅异步抛出异常(例如在Task.Run 内)。

    【讨论】:

      猜你喜欢
      • 2012-08-24
      • 1970-01-01
      • 2018-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-05
      相关资源
      最近更新 更多