WebAPI 2 IAuthenticationFilter 返回 401

Far*_*ukh 1 .net c# asp.net asp.net-web-api2

我需要从 AuthenticationFiler 返回 401 Unauthorized 但是当我由于某种原因抛出 HttpResponseException 它返回 302 Found 然后重定向到 login.aspx。

这是我的过滤器示例:

public class MyAuthenticationFilterAttribute : Attribute, IAuthenticationFilter
{
    public bool AllowMultiple { get { return false; } }

    public async Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken)
    {
        Trace.TraceInformation("Authenticate");

        throw new HttpResponseException(HttpStatusCode.Unauthorized);
    }

    public Task ChallengeAsync(HttpAuthenticationChallengeContext context, CancellationToken cancellationToken)
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

我只是在 Startup.cs 上注册它

如何从 AuthenticationFiler 正确返回 401 Unauthorized?

Cod*_*ler 5

在实现身份验证过滤器时,您不应该HttpResponseException在身份验证失败的情况下抛出。如果您发现身份验证失败,只需ErrorResultHttpAuthenticationContext传递给过滤器的参数中设置属性:

public async Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken)
{
    Trace.TraceInformation("Authenticate");

    context.ErrorResult = new UnauthorizedResult(Enumerable.Empty<AuthenticationHeaderValue>(), context.Request);
}
Run Code Online (Sandbox Code Playgroud)