3

サーバーへのすべてのリクエストでヘッダー情報を探す検証ルーチンを実行する必要があります。ASP.NET MVCのOnActionExecutingまたはActionInvokerを使用してすべての要求を実行しますが、Web APIを調べていて、特定のものは見つかりませんでした。

同期と非同期の両方に何かを実装できるのであれば、それが最善でしょう。

4

1 に答える 1

8

Web APIの場合は、MessageHandlers

メッセージハンドラーは、パイプライン内の他の何よりも先に常に最初に実行され、最後に実行することもできます(Web APIが応答を返した後、応答がクライアントに到達する直前)。

メッセージハンドラーの詳細については、 http://www.asp.net/web-api/overview/working-with-http/http-message-handlersを参照してください

そして、APIキーを検証する簡単な例を次に示します。

public class WebApiKeyHandler : DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        string apikey = HttpUtility.ParseQueryString(request.RequestUri.Query).Get("apikey");
        if (apikey != "something")
        {
            HttpResponseMessage response = request.CreateErrorResponse(HttpStatusCode.Forbidden, "You can't use the API without the key.");
            throw new HttpResponseException(response);
        }
        else
        {
            return base.SendAsync(request, cancellationToken);
        }
    }
}

この例では、キーが「something」のリクエストのみです。つまり、/ api / values /?apikey = somethingが許可され、他のすべては拒否されます。

あなたの場合は、request.Headersにアクセスして、必要なものを検証するだけです。

于 2012-10-17T02:16:48.780 に答える