2012-04-20 5 views
19

Web APIコントローラのPOSTメソッドは、ローカルとテストサーバーで正常に動作します。すべてがうまくいけばそれが返されます。Web APIメソッドから返されたエラーメッセージは、非dev環境では省略されています。

new HttpResponseMessage(HttpStatusCode.Created) 

何かがうまくいかない場合は、それが返されます。

new HttpResponseMessage<IEnumerable<string>>(usefulMessages, HttpStatusCode.BadRequest); 

問題は、私はエラーになり、テストサーバーに要求を行うとき、私は得ることです悪い要求コードが戻ってきましたが、メッセージは表示されません。私のローカルマシンに全く同じ要求をすると、メッセージが表示されます。以下の出力は、私自身のツールから、次のとおりです。

私が取得テストサーバーへのリクエストの送信
Status code: 400 (BadRequest) 
Response data: ["Error message one", "Error message two"] 

Status code: 400 (BadRequest) 
Response data: Bad Request 

コード

は私が得る私のローカルマシンにリクエストを送信します実行されているのはまったく同じです。データベースは同じです。要求を処理しているサーバーを除いてすべて同じです。私は自分自身にエラーメッセージを電子メールで送信するコードを持っているので、サーバーが正しいエラーメッセージを生成し、正しく動作していることがわかります。これはIISのもの(Web APIの場合はcustomErrors = RemoteOnlyに相当)ですか?応答データからエラーメッセージが省略されるだけでなく、「Bad Request」というフレーズが生成されて、代わりにそこに配置されます。

アイデア?ありがとう。

答えて

1

あなたのcustomErrorsモードが私にとってとてもうまくいくかのように聞こえます。 WebAPIはASP.NET(MVC)上で実行されているため、すべて同じweb.config設定を使用します。

テストサーバーの場合は、customErrorsをオフにして検証することができます。

<system.web> 
    <customErrors mode="Off" /> 
</system.web> 
+2

これは機能していないようです。そうした場合、新しい質問が出されます。「なぜWebページのユーザーに、有益なWebサービスの応答を与えるために、スタックトレースを持つ黄色のサーバーエラーページが表示されなければならないのですか? –

14

HttpConfiguration.IncludesErrorDetailPolicy上this MSDN postを見てみましょう:あなたのGlobal.asaxの中

var config = GlobalConfiguration.Configuration; 
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; 

私は詳細を含めるようにエラーメッセージを強制するために、この構成プロパティを使用していました。

+2

これはうまくいかないようです。また、それは少し広がっているようです。ジェイソンの質問に対する私のコメントを見てください。また、私は3日前にこのコメントを残しました。今日戻ってきた時、コメントはここにはなく、答えは(誤って)受け入れられました。何が起こったのかわかりません - それは残念です。 –

1

ベータ版以降、Web APIコードベースには多くの変更がありました。素晴らしいawesomeness。夜間署名付きビルドを取得する方法を参照してくださいhere

generic HttpResponseMessage<T>はサポートされなくなりました。 HttpRequestMessage.CreateResponse<T>を使用してください。 thisおよびthisを参照してください。

ベータ版を使用するのではなく、現在の夜間ビルドに更新したいと思っています。特にWeb APIのための多くの良い改善。

EDIT:私の心の中、私は具体的な答えをそこに見ていないが、新しいものがIISによって傍受されません応答を返すようで、ので、これは実際にあなたの元の質問に関連していました。これは、エラー処理/エラー報告の再処理と関係している可能性があります。

更新日8/14/2012現在のリリース候補MVC 4/Web APIは十分です。あなたは完全に最新の状態に留まらない限り、夜間のビルドを行う必要はありません。

9

同じ問題がありました。実際にはカスタムエラーの設定が原因です。

現実のシナリオでは、アプリケーションでカスタムエラーページを使用することは間違いありませんが、WebAPIでカスタム例外メッセージが機能するには、カスタムエラーページを無効にする必要があります。

これを修正するにはどうすればよいですか?幸いなことに、web.configの<location>要素を使用してこれを解決できます。

ソリューション:

<!-- General for the application --> 
    <system.web> 
    <customErrors mode="RemoteOnly" defaultRedirect="YourCustomErrorPage.aspx"/> 
    </system.web> 

    <!-- Override it for paths starting with api (your WebAPI) --> 
    <location path="api"> 
    <system.web> 
     <customErrors mode="Off" /> 
    </system.web> 
    </location> 

私は自分のアプリでこのメソッドを使用し、うまく動作します。

関連する問題