我有一个操作处理程序,用于检查身份验证,并在使用
进行身份验证失败时抛出异常throw new WebFaultException(HttpStatusCode.Unauthorized);
但是,这仍然会向客户端/测试客户端返回404 Not Found状态代码。
这是我的操作处理程序
public class AuthOperationHandler : HttpOperationHandler<HttpRequestMessage, HttpRequestMessage>
{
RequireAuthorizationAttribute _authorizeAttribute;
public AuthOperationHandler(RequireAuthorizationAttribute authorizeAttribute) : base("response")
{
_authorizeAttribute = authorizeAttribute;
}
protected override HttpRequestMessage OnHandle(HttpRequestMessage input)
{
IPrincipal user = Thread.CurrentPrincipal;
if (!user.Identity.IsAuthenticated)
throw new WebFaultException(HttpStatusCode.Unauthorized);
if (_authorizeAttribute.Roles == null)
return input;
var roles = _authorizeAttribute.Roles.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
if (roles.Any(role => user.IsInRole(role)))
return input;
throw new WebFaultException(HttpStatusCode.Unauthorized);
}
}
我做错了吗?
答案 0 :(得分:1)
我有好消息和坏消息。您正在使用的框架已演变为ASP.NET Web API。不幸的是,OperationHandler不再存在。他们最接近的等价物是ActionFilters。
话虽如此,WCF Web API从不支持抛出WebFaultException,这是WCF SOAP遗产的遗迹。我认为异常被称为HttpWebException,但是,我从未使用它,我只是在响应上设置状态代码。