1

Application_Error() イベントを使用して、Web API ですべての HTTP 例外を取得しています。このイベントは、「404」、「500」などのすべての HTTP コードを返し、「Server.TransferRequest()」を使用して、カスタム エラーを表示するために「エラー コントローラ」にリクエストを転送します。しかし、Application_Error() は HTTP エラー "405" ("要求されたリソースは HTTP メソッド 'GET/POST/PUT/DELETE' をサポートしていません") の場合には起動しません。"405" の場合に独自のカスタム エラーを表示したいAPI ですべてのコントローラの (GET,POST,PUT,DELETE) メソッドを公開し、これらのメソッドから独自のカスタム エラーを返す. しかし、それは目的を達成するための良い方法ではありません.これを行うためのクリーンな方法について誰かが私を案内してくれますか?どんな助けも大歓迎です。

4

1 に答える 1

2

少し遅れていることは承知していますが、MessageHandlers を使用すると必要なことが可能です:
http://www.asp.net/web-api/overview/advanced/http-message-handlers

実装する必要がありますDelegatingHandler

public class MethodNotAllowedHandler : DelegatingHandler
{
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, 
        CancellationToken cancellationToken)
    {
        HttpResponseMessage response = await base.SendAsync(request, cancellationToken);
        if (response.StatusCode == System.Net.HttpStatusCode.MethodNotAllowed)
        {
            //do your handling here
            //maybe return a new HttpResponseMessage
        }
        return response;
    }
}

次に、それをHttpConfiguration

config.MessageHandlers.Add(new MethodNotAllowedHandler());
于 2016-08-23T22:15:37.947 に答える