如何通过JSON在ASP.NET MVC 3.0中返回错误的正确响应?

我正在努力解决这个问题。 在我的本地计算机(Win7 / VS2010 / IIS 7.5)和另一台相同的开发人员的计算机上,以下代码返回500状态代码,响应文本显示“无法找到具有指定电子邮件地址的用户”。

当我将站点部署到我的测试服务器(Win2008 R2 / IIS7.5)时,它返回正确的状态代码,但内容类型设置为“text / html”,而responseText不包含该消息。

我已经尝试关闭服务器上的自定义错误,这没有任何区别。 谁能发现问题可能是什么?

我有一个使用AjaxHelper.BeginForm方法配置的表单:

@using (Ajax.BeginForm("FindUser", new AjaxOptions {OnSuccess="findComplete", OnFailure="findFailed"}) { 
@Html.EditorFor(m => m.UserEmail)
}

使用error handlingjavascript函数:

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

控制器操作捕获任何错误并返回一条消息:

 [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); } } 

任何帮助将非常感激 :)

看起来IIS正在吃响应并试图用它做自定义错误。

尝试设置

 Response.TrySkipIisCustomErrors = true 

在你的捕获。

或者,设置以下配置值: