WebApi返回错误的状态代码

时间:2012-02-18 10:48:19

标签: wcf wcf-web-api

我有一个操作处理程序,用于检查身份验证,并在使用

进行身份验证失败时抛出异常
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);
    }
}

我做错了吗?

1 个答案:

答案 0 :(得分:1)

我有好消息和坏消息。您正在使用的框架已演变为ASP.NET Web API。不幸的是,OperationHandler不再存在。他们最接近的等价物是ActionFilters。

话虽如此,WCF Web API从不支持抛出WebFaultException,这是WCF SOAP遗产的遗迹。我认为异常被称为HttpWebException,但是,我从未使用它,我只是在响应上设置状态代码。