在异步路由处理程序中执行每路由身份验证时出现 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
内)。
当我尝试异步处理路由并在该路由内进行身份验证时,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
内)。