在异步路由处理程序中执行每路由身份验证时出现 NancyFX 错误

NancyFX error when doing per-route authentication in async route handler

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

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

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

我按照指南here配置了无状态身份验证。

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

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

如何在具有按路由身份验证的异步路由处理程序中让 Nancy 到达 return 401? 我正在使用南希 1.0.0.

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

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

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

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