2016-08-03 19 views
2

は、私は私のコントローラでこのコードを持っています。私はこのコードを書いた:Request.CreateErrorResponseから例外メッセージを取得するにはどうすればよいですか?私は例外または少なくともエラーを取得したい、私の呼び出し元のコードでは</p> <pre><code>return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, new Exception("Your cat is too small")); </code></pre> <p>:

ObjectContent objContent = response.Content as ObjectContent; 

objContentはタイプHttpErrorであるので、私はそれを引き抜い:

HttpError error = objContent.Value as HttpError; 

をしかし、一つの値、キーで辞書であることをerrorようだ:メッセージ、ValueL「アンエラーが発生しました」

例外の兆候はありません。

Assert.AreEqual("Your cat is too small", error["Message"]); 

アサーションが失敗します。

+0

'HttpError'は、' ExceptionMessage'と 'InnerException'を持っています。それらは人口ですか? – Brandon

+0

恐れていない、どちらもヌルです – NibblyPig

答えて

1

あなたのコードを使用して問題を再現しました。

私はExceptionが飲み込まれていた理由を確認するために、.NETコードにステップすることができませんでしたので、私はHttpRequestMessageExtensions source on GitHubを見ていたし、それが作成された新しいHttpErrorオブジェクトにExceptionを渡すことがわかりました設定から(ライン459)。

私は.NETコードを使用し、何が起こるかを見るために次のように説明しました。私はrの値を検査する場合

private static HttpResponseMessage Test() 
{ 
    HttpRequestMessage request = new HttpRequestMessage(); 

    return Test2(HttpStatusCode.InternalServerError, new Exception("Your cat is adequately sized.")); 
} 

public static HttpResponseMessage Test2(HttpStatusCode statusCode, Exception exception) 
{ 
    return Test2(statusCode, includeErrorDetail => new HttpError(exception, includeErrorDetail)); 
} 

private static HttpResponseMessage Test2(HttpStatusCode statusCode, Func< bool, HttpError > errorCreator) 
{ 
    HttpError r = errorCreator(false); 
    return null;  
} 

は、私がExceptionを見ることはできません。上記のerrorCreatorに渡されたboolの値をtrueに変更した場合rを調べると、もっと詳しく見ることができます。

WebまたはHttpという名前空間では大したことではないので、GHのソースからそのHttpErrorに真を渡す方法を理解する必要があります。

質問には直接答えませんが、うまくいけば正しい方向にあなたを指しています。

+0

多くのありがとうございます。私はいくつかのオーバーロードを試して、あきらめて、 'return Request.CreateResponse(HttpStatusCode.InternalServerError、new Exception(myMessage)); 'を使用しました。それは例外になります。私はそれが開発で見過ごされたと思います。 – NibblyPig

+0

それは本当に奇妙です。デシリアライズされたことはわかりませんでしたが、実行可能なソリューションが見つかったのでうれしいです。 – Brandon

関連する問題

 関連する問題