2011-06-23 8 views
10

मैं इस समस्या को हल करने के लिए संघर्ष कर रहा हूं। मेरी स्थानीय मशीन (विन 7/वीएस -2010/आईआईएस 7.5) और एक और समान डेवलपर मशीन पर, निम्न कोड 500 स्टेटस कोड देता है, और प्रतिक्रिया टेक्स्ट कहता है "निर्दिष्ट ईमेल पते वाले उपयोगकर्ता को नहीं ढूंढ सका"।JSON के माध्यम से एएसपी.नेट एमवीसी 3.0 में त्रुटि पर सही प्रतिक्रिया कैसे वापस करें?

जब मैं साइट को अपने टेस्ट सर्वर (Win2008 R2/IIS7.5) पर तैनात करता हूं तो यह सही स्थिति कोड देता है, लेकिन सामग्री प्रकार "टेक्स्ट/एचटीएमएल" पर सेट होता है और प्रतिक्रिया टेक्स्ट में संदेश नहीं होता है।

मैंने सर्वर पर कस्टम त्रुटियों को बंद करने का प्रयास किया है, जिसने कोई फर्क नहीं पड़ता। क्या कोई यह बता सकता है कि समस्या क्या हो सकती है?

function findFailed(result) { 
    var error = result.responseText; 
    if (error) { 
     $('#find-err .contents').text(error).slideDown(); 
    } 
} 

नियंत्रक कार्रवाई किसी भी त्रुटि को देखता है और संदेश देता है:

@using (Ajax.BeginForm("FindUser", new AjaxOptions {OnSuccess="findComplete", OnFailure="findFailed"}) 
{ 
    <fieldset> 
     @Html.EditorFor(m => m.UserEmail) 
     <div class="form-item button search"> 
      <input type="submit" value="Find"/> 
     </div> 
     <div id="find-err" class="message error hidden"> 
      <div class="contents"></div> 
     </div> 
    </fieldset> 
} 

जावास्क्रिप्ट समारोह प्रबंधन में एक त्रुटि के साथ:

मैं एक रूप है कि AjaxHelper.BeginForm विधि का उपयोग कर कॉन्फ़िगर किया गया है है:

[HttpPost] 
public ActionResult FindUser(FindUserModel model) 
{ 
    try 
    { 
     // code to find user 

     if (user == null) 
     { 
      throw new Exception("Could not locate user with specified email address."); 
     } 

     if (Request.IsAjaxRequest()) 
     { 
      return Json(new { id = user.Id, name = user.Name }, JsonRequestBehavior.AllowGet); 
     } 

     model.FoundUser = user; 
     return View("Details", model); 
    } 
    catch (Exception ex) 
    { 
     if (Request.IsAjaxRequest()) 
     { 
      Response.StatusCode = 500; 
      return Json(ex.Message, JsonRequestBehavior.AllowGet); 
     } 

     ModelState.AddModelError("UserEmail", ex.Message); 
     return View(model); 
    } 
} 

किसी भी मदद की बहुत सराहना की जाएगी :)

उत्तर

15

ऐसा लगता है कि आईआईएस प्रतिक्रिया खा रहा है और इसके साथ कस्टम त्रुटि सामान करने की कोशिश कर रहा है।

कोशिश अपनी पकड़ में

Response.TrySkipIisCustomErrors = true 

की स्थापना।

<httpErrors errorMode="Custom" existingResponse="PassThrough"/> 
+0

अच्छा एक, आईआईएस कस्टम त्रुटियों रास्ते में आ नहीं माना जाता था:

वैकल्पिक रूप से निम्नलिखित config मान सेट करें। My HandleErrorsAttribute TrySkipCustomErrors सेट करता है, लेकिन जब किसी JSON प्रतिक्रिया के साथ स्थिति को सीधे लौटाता है, तो मैं इसे सेट नहीं कर रहा था। –

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