当我尝试异步处理路由并在该路由中进行身份验证时,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在使用per-route身份验证的异步路由处理程序中返回401? 我正在使用Nancy 1.0.0。
答案 0 :(得分:1)
好的,现在我明白了。不幸的是我提供的信息太少了。
我对如何处理请求并不十分诚实。当RouteExecutionEarlyExitException
同步抛出时,Nancy以500而不是401失败,如下所示:
Get["/", true] = (args, ct) =>
{
this.RequiresAuthentication();
return Task.FromResult((object) "Hello World!");
};
当Nancy在调用路由处理程序时使用await
时不会发生AFAIK(即await handler(args, ct)
),但是当同步调用处理程序时(即handler(args, ct).ContinueWith(...)
)可能会发生这种情况。
和it seems一样,南希使用后一种方法。
因此解决方案是坚持使用async
修饰符或确保仅异步抛出异常(例如在Task.Run
内)。