我正在尝试按照这个 2013 指南设置每个请求的错误处理策略。
- 如果请求是本地的,则显示错误信息。
- 如果当前用户在 IT 组中,则显示错误信息。
- 对于其他所有人,不要显示错误。
我的代码:
public class PerRequestErrorPolicyDelegatingHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
request.Properties[HttpPropertyKeys.IncludeErrorDetailKey] = new Lazy<bool>(() =>
{
// CHECK USER
var identity = request.GetRequestContext().Principal as ClaimsPrincipal;
return identity != null && identity.Identity.IsAuthenticated && identity.IsInRole("IT");
});
return base.SendAsync(request, cancellationToken);
}
}
它被注册为第一个处理程序:
public static void Configure(HttpConfiguration http)
{
http.MessageHandlers.Add(new PerRequestErrorPolicyDelegatingHandler());
...
}
我的 Web Api 托管在 Owin 上,但我没有看到相关的 Owin 代码,所以我省略了它。为了测试,我正在使用这个控制器:
[AllowAnonymous]
[RoutePrefix("api/sandbox")]
public class SandboxApiController : ApiController
{
[HttpPost, Route("test")]
public IHttpActionResult Test()
{
throw new InvalidOperationException($"you screwed up. Local: {RequestContext.IsLocal}, IT: {User.IsInRole("IT")}");
}
}
在本地,我总是得到错误信息,并且延迟加载代码(由“CHECK USER”表示)永远不会执行,所以我不知道如何调试它。
部署到服务器,无论是否经过身份验证,我都不会收到任何错误信息。
我的 web.config 中没有自定义错误配置。
我做错了什么?