2011-12-01 6 views
16

これは奇妙なものです。私はMVC 3を実行しており、例外をラップして標準のHTTPエラーとともにメッセージを返すカスタムアクションの結果を持っています。リモートでカスタムHTTPエラーの詳細を返すことができません

public class ExceptionResult : ActionResult 
{ 
    private readonly Exception _exception; 

    public ExceptionResult(Exception exception) 
    { 
     _exception = exception; 
    } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     var response = context.HttpContext.Response; 
     response.ClearHeaders(); 
     response.Cache.SetNoStore(); 
     response.ContentType = ContentType.Json; 

     var baseEx = _exception as BaseException ?? new ServerException(_exception); 

     var result = baseEx.GetResult(); 

     var json = result.ToJSON(); 
     response.Write(json); 
     response.StatusCode = (int)result.Status.Code; 
    } 
} 

私はローカルでこれを実行すると、私は期待して正確に何を得る:

HTTP/1.1 400 Bad Request 
Cache-Control: no-store 
Content-Type: application/json; charset=utf-8 
Server: Microsoft-IIS/7.5 
X-AspNet-Version: 4.0.30319 
Date: Thu, 01 Dec 2011 19:00:03 GMT 
Content-Length: 81 

{"error":"invalid_request","error_description":"Parameter grant_type is missing"} 

しかし、私は別のマシンから接続しようとする私の代わりに、標準のIISのエラーメッセージが表示されます。

HTTP/1.1 400 Bad Request 
Cache-Control: no-store 
Content-Type: text/html 
Server: Microsoft-IIS/7.5 
X-AspNet-Version: 4.0.30319 
Date: Thu, 01 Dec 2011 19:02:33 GMT 
Content-Length: 11 

Bad Request 

更新

そうでなければならないIISパイプラインのどこかで応答を呑み込んでコンテンツを書き換えているhttpモジュールです。リクエストとレスポンスを記録するモジュールを作成しましたが、実際にブラウザに送信するのは間違っています。少しsleuthingへ

2011-12-02 15:39:00,518 - ======== Request ======== 
2011-12-02 15:39:00,518 - GET /oauth/2/token HTTP/1.1 
2011-12-02 15:39:00,519 - Cache-Control: max-age=0 
2011-12-02 15:39:00,519 - Connection: keep-alive 
2011-12-02 15:39:00,519 - Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
2011-12-02 15:39:00,519 - Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 
2011-12-02 15:39:00,519 - Accept-Encoding: gzip,deflate,sdch 
2011-12-02 15:39:00,519 - Accept-Language: en-US,en;q=0.8 
2011-12-02 15:39:00,519 - Host: micah-pc:8095 
2011-12-02 15:39:00,519 - User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2 
2011-12-02 15:39:00,519 - ========================= 
2011-12-02 15:39:00,519 - OAuth exception occurred. 
BoomTown.OAuth.OAuthException: Parameter grant_type is missing 
    at BoomTown.OAuth.Request.TokenRequest.GetRequestValidator() in C:\code\BoomTown\Api\BoomTown.OAuth\Request\TokenRequest.cs:line 19 
    at BoomTown.OAuth.Request.OAuthRequestBase.Validate() in C:\code\BoomTown\Api\BoomTown.OAuth\Request\OAuthRequestBase.cs:line 33 
    at BoomTown.OAuth.Request.OAuthRequestBase..ctor(HttpRequestBase request, IOAuthServiceLocator serviceLocator) in C:\code\BoomTown\Api\BoomTown.OAuth\Request\OAuthRequestBase.cs:line 28 
    at BoomTown.OAuth.Request.TokenRequest..ctor(HttpRequestBase request, IOAuthServiceLocator serviceLocator) in C:\code\BoomTown\Api\BoomTown.OAuth\Request\TokenRequest.cs:line 13 
    at BoomTown.Api.Web.Controllers.OAuth.V2.OAuthController.Token() in C:\code\BoomTown\Api\BoomTown.Api.Web\Controllers\OAuth\V2\OAuthController.cs:line 26 
2011-12-02 15:39:00,520 - ======= Response ======= 
2011-12-02 15:39:00,520 - HTTP/1.1 400 Bad Request 
2011-12-02 15:39:00,520 - Cache-Control: no-store 
2011-12-02 15:39:00,520 - X-AspNet-Version: 4.0.30319 
2011-12-02 15:39:00,520 - Content-Type: application/json; charset=utf-8 
2011-12-02 15:39:00,520 - {"error":"invalid_request","error_description":"Parameter grant_type is missing"} 

SOLUTION

おかげで、私はそれを把握することができました。 IISトレースをセットアップして、customerrormoduleに関連していて、私の要求を傍受してエラーメッセージを上書きしていた疑いがあることを確認しました。私は

<system.web> 
    <customErrors /> 
<system.web> 

の設定で猿をつけていたが、役に立たなかった。私は正しい軌道に乗っていたが、それは私がこのように正しいweb.configファイルのセクションを変更する必要が実行しているIIS 7だから:

<system.webServer> 
    <httpErrors errorMode="Detailed" /> 
    </system.webServer> 

は今、すべての私のカスタムJSONメッセージは完全に通ってきます。これにタグチームのための Jason Finneyfrockへの大きな感謝。

+0

1良い質問は、あなたが結果を返すされているか、IISが傍受されて確認していますか?私は、Content-Typeがリモートレスポンスで異なっていることに気付きました。 –

答えて

9

、あなただけDetailedLocalOnlyように定義httpErrorsを持っているのですか?この状況でコンテンツが削除されるかどうかはわかりません。

http://www.iis.net/ConfigReference/system.webServer/httpErrors

+0

HA!私はちょうどこれを見る前にそれを理解しました。それはまさに問題です。 – Micah

3

私はそれが役立つかどうかわから、これを越えていない来た:あな​​たのweb.configファイルで

context.HttpContext.Response.TrySkipIisCustomErrors = true; 
+0

私はそれを試しただけで何もしなかった。 – Micah

関連する問題