WebAPI 2 アプリ用に以下のカスタム AuthorizationFilterAttribute を作成しました。
public class ApiKeyRequiredAttribute : AuthorizationFilterAttribute
{
private string key;
public ApiKeyRequiredAttribute(string key) : base()
{
this.key = key;
}
public override Task OnAuthorizationAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
{
IEnumerable<string> headers = new List<string>();
actionContext.Request.Headers.TryGetValues("x-apikey", out headers);
if (!headers.Any() || headers.Single() != this.key)
{
throw new SecurityException("Invalid API key provided");
}
return base.OnAuthorizationAsync(actionContext, cancellationToken);
}
}
正しいヘッダーを持つユーザーには結果が表示され、他のユーザーには例外が発生します。ただし、どうすれば を返すことができHTTP Error 401 Unauthorized
ますか?
例外をスローしないとすぐに、通常の実行フローが続行されます。確かに、グローバル例外ハンドラーを実装する必要はありませんよね?