2017-12-18 22 views
0

WebApiから生成された405Method not Allowed)エラーを処理しようとしています。処理中のエラー

など。:基本的に、このエラーは、誰かが私のApiにGetリクエストではなくPostリクエストを呼び出すたびに処理されます。

私はこれをプログラマチックに(すなわちIIS設定なしで)行いたいと思いますが、この種のエラーを処理するドキュメントはありません。この例外が発生したときにIExceptionHandlerはトリガされません。

アイデア?

+0

WebサーバーはWindows Server上のIISですか? – creyD

+0

はい、私はサーバーやIISを制御できませんので、プログラマチックに処理する方法があればそれが望ましいでしょう。 – Ayman

答えて

1

部分応答: HTTPメッセージのライフサイクルをhereから調べると、HttpRoutingDispatcherの前にパイプラインの早い時期にメッセージハンドラを追加する可能性があります。だから、

、ハンドラクラスを作成します。あなたのWebApiConfigで

public class NotAllowedMessageHandler : DelegatingHandler 
{ 
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
    { 
     var response = await base.SendAsync(request, cancellationToken); 

     if (!response.IsSuccessStatusCode) 
     { 
      switch (response.StatusCode) 
      { 
       case HttpStatusCode.MethodNotAllowed: 
       { 
        return new HttpResponseMessage(HttpStatusCode.MethodNotAllowed) 
        { 
         Content = new StringContent("Custom Error Message") 
        }; 
       } 
      } 
     } 

     return response; 
    } 
} 

を、Registerメソッドに次の行を追加します。あなたはレスポンスのステータスコードをチェックして、カスタムを生成することができます

config.MessageHandlers.Add(new NotAllowedMessageHandler()); 

をそれに基づくエラーメッセージ。