2011-12-01 3 views
16

यह एक अजीब बात है। मैं एमवीसी 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"} 

लेकिन जब मैं एक अलग मशीन से कनेक्ट करने का प्रयास मैं मानक आईआईएस त्रुटि संदेश के बजाय मिल:

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 

अद्यतन

ऐसा होना चाहिए मुझे आईआईएस पाइपलाइन में कहीं भी http मॉड्यूल है जो प्रतिक्रिया निगल रहा है और सामग्री को फिर से लिख रहा है। मैंने अनुरोध और प्रतिक्रिया लॉग करने के लिए एक मॉड्यूल लिखा और यह वास्तव में वापस लौट रहा है जो मैं उम्मीद करता हूं हालांकि वास्तव में ब्राउज़र को जो भी बनाता है वह गलत है।

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"} 

समाधान

एक छोटे से sleuthing के लिए धन्यवाद मैं यह पता लगाने में सक्षम था। मैंने आईआईएस ट्रेसिंग की स्थापना की जिसने मेरे संदेह की पुष्टि की कि यह कस्टमरॉर्म्यूल्यूल से संबंधित था जो मेरे अनुरोधों को रोक रहा था और मेरे त्रुटि संदेशों को ओवरराइट कर रहा था। मैंने

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

सेटिंग्स के साथ बंदरगाह रखा लेकिन इसका कोई फायदा नहीं हुआ। मैं सही रास्ते पर था, लेकिन बाद से यह आईआईएस 7 कि मैं चल रहा हूँ मैं इस तरह सही web.config अनुभाग बदलने के लिए की जरूरत है:

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

अब मेरे सभी कस्टम JSON संदेशों पूरी तरह से के माध्यम से आते हैं। इस पर टैग टीम के लिए Jason Finneyfrock पर बड़ा धन्यवाद।

+0

+1 अच्छा सवाल है, आप की पुष्टि की है कि आप परिणाम लौट रहे हैं या आईआईएस में अवरोध उत्पन्न कर रहा है? मैंने देखा कि रिमोट प्रतिक्रिया पर सामग्री-प्रकार अलग है। –

उत्तर

9

अपने web.config में, आप httpErrors केवल DetailedLocalOnly होने के लिए परिभाषित किया गया है? मुझे यकीन नहीं है कि इस स्थिति में सामग्री को हटा दिया जाएगा या नहीं।

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

+0

एचए! मैंने इसे देखने से पहले इसे ठीक से समझ लिया। यह वास्तव में समस्या है। – Micah

3

मैं नहीं यकीन है कि अगर यह आपकी मदद करेगा यह भर में आया था,:

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

मैंने अभी कोशिश की और यह कुछ भी नहीं किया। – Micah

संबंधित मुद्दे