2017-12-02 7 views
0

AuthenticationFilerから401 Unauthorizedを返す必要がありますが、何らかの理由でHttpResponseExceptionをスローすると、302 Foundが返され、login.aspxにリダイレクトされます。WebAPI 2 IAuthenticationFilter return 401

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(); 
    } 
} 

と私はちょうどどのように適切にAuthenticationFilerから401権限を返すことができStartup.cs

でそれを登録します。ここでは

は私のフィルタの例でありますか?

答えて

3

認証フィルタを実装する場合、認証に失敗した場合はHttpResponseExceptionを投げないでください。あなたは、認証が失敗したことを認識した場合、単にフィルタに渡されるHttpAuthenticationContextパラメータでErrorResultプロパティを設定:この回答に追加するには

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

    context.ErrorResult = new UnauthorizedResult(Enumerable.Empty<AuthenticationHeaderValue>(), context.Request); 
} 
+0

、例外は高価です。あなたはそれらを最小限に保つために:) – gldraphael

関連する問題