2

Microsoft ASP.NET Web API を使用して RESTful サービスを開発しています。

私が必要とするのは、フローがコントローラーメソッドに入る前に、サービスが呼び出されるたびにトリガーされるある種のハンドラー関数を持つことです。

たとえば、データベースを呼び出して、リクエスト ヘッダーで提供されたハッシュ トークンに API を介してデータを取得する権限があるかどうかを確認し、ある場合はコントローラー メソッドに進みます。

WebAPI で必要なプログラム可能な場所はありますか? 私は Web API のデータ フローにあまり詳しくありません。

4

2 に答える 2

1

私が必要とするのは、フローがコントローラーメソッドに入る前に、サービスが呼び出されるたびにトリガーされるある種のハンドラー関数を持つことです。

と書くことができますcustom message handler。たとえば、MSDN の記事に示されているように:

public class ApiKeyHandler : DelegatingHandler
{
    public string Key { get; set; }

    public ApiKeyHandler(string key)
    {
        this.Key = key;
    }

    protected override Task<HttpResponseMessage> SendAsync(
        HttpRequestMessage request, CancellationToken cancellationToken)
    {
        if (!ValidateKey(request))
        {
            var response = new HttpResponseMessage(HttpStatusCode.Forbidden);
            var tsc = new TaskCompletionSource<HttpResponseMessage>();
            tsc.SetResult(response);    
            return tsc.Task;
        }
        return base.SendAsync(request, cancellationToken);
    }

    private bool ValidateKey(HttpRequestMessage message)
    {
        var query = message.RequestUri.ParseQueryString();
        string key = query["key"];
        return (key == Key);
    }
}
于 2013-08-21T16:42:55.147 に答える
0

別の方法は、実装する独自のクラスを作成することですIDispatchMessageInspector

詳細はこちら

承認チェックを afterRecieveRequest に追加し、リクエスト オブジェクトにヘッダーがない場合は例外 (おそらく http 403) をスローします。

于 2013-08-21T17:00:37.813 に答える