0

アクションメソッドのマイ経路テンプレートは、以下のようなものです質問1:エラーメッセージ

次のURLを使用して上記のエンドポイントを消費しています。私は、ブール・パラメータに文字列値を渡しています

http://localhost/api/controller?select=lskdfj

私は、次の応答を取得:

{ 
"Message": "The request is invalid.", 
"MessageDetail": "The parameters dictionary contains a null entry for parameter 'select' of non-nullable type 'System.Boolean' for method 'int GetMethod(Boolean)' in '**ProjectName.Controllers.ControllerName**'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter." 
} 

代わりのプロジェクト名を示す、コントローラ名以上も我々のコードの内容であり、メッセージには詳細があり、消費者/クライアントにカスタマイズメッセージを表示したい。

これを行う方法はありますか?

質問2:

私は次のURLを使って、エンドポイント上にかかるのです。間違ったパラメータ名をつけて渡しています。

http://localhost/api/controllerselt = true

エラーをスローするのではなく、エラーをスローするのではなくselectのデフォルト値をfalseにします。

提供されたパラメータ(selt)が間違っているというエラーメッセージをクライアントに送信する方法はありますか?

答えて

0

私たちのコードの詳細であるコントローラ名と上記のメッセージには詳細がありますが、コンシューマー/クライアントにカスタマイズメッセージを表示したいと思います。

オプション1

あなたのコードの詳細を非表示にしたい場合は、ちょうどこのようGlobal.asax.csファイルに設定を変更することができます。

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = 
    IncludeErrorDetailPolicy.Never; // Or Local 

オプション2

メッセージをカスタマイズする場合は、処理パイプラインに「フック」する必要がありますドアを出る前に応答を変更してください。これを行うには、Custom Message Handlerを作成する必要があります。

public class CustomMessageHandler : DelegatingHandler 
{ 
    protected async override Task<HttpResponseMessage> SendAsync(
     HttpRequestMessage request, CancellationToken cancellationToken) 
    { 
     // Call the inner handler. 
     var response = await base.SendAsync(request, cancellationToken); 
     if (response.StatusCode == System.Net.HttpStatusCode.BadRequest && 
      request.RequestUri.ToString().Contains("getmethod")) 
     { 
      HttpError error = null; 
      if (response.TryGetContentValue(out error)) 
      { 
       // Modify the message details 
       error.MessageDetail = "Something customized."; 
      } 
     } 
     return response; 
    } 
} 

WebApiConfigで上記のメッセージハンドラを登録します。ここで私はすぐにあなたのために一緒に入れて何かがあります。

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

今、あなたは代わりにカスタムメッセージが表示されます。このコード行を追加することにより、CS

+0

ありがとう@コーディングYoshi。オプション1の場合:内部のデバッグ目的でエラーメッセージをログに記録する方法はありますか?クライアントには表示されません。 – Vicky

+0

@vickyはい、 'Local'を使うと、サイトが展開されている同じマシンからローカルに行われたリクエストだけが詳細を見るでしょう。 – CodingYoshi