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) メソッドを公開し、これらのメソッドから独自のカスタム エラーを返す. しかし、それは目的を達成するための良い方法ではありません.これを行うためのクリーンな方法について誰かが私を案内してくれますか?どんな助けも大歓迎です。
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 に答える