我正在努力解决这个问题。在我的本地计算机(Win7 / VS2010 / IIS 7.5)和另一台相同开发人员的计算机上,以下代码返回500状态代码,响应文本显示“无法找到具有指定电子邮件地址的用户”。
当我将站点部署到我的测试服务器(Win2008 R2 / IIS7.5)时,它会返回正确的状态代码,但内容类型设置为“text / html”,而responseText不包含该消息。< / p>
我已经尝试关闭服务器上的自定义错误,这没有任何区别。谁能发现问题可能是什么?
我有一个使用AjaxHelper.BeginForm方法配置的表单:
@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>
}
使用错误处理javascript函数:
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);
}
}
非常感谢任何帮助:)
答案 0 :(得分:15)
看起来IIS正在吃响应并试图用它做自定义错误。
尝试设置
Response.TrySkipIisCustomErrors = true
在你的捕获中。
或者设置以下配置值:
<httpErrors errorMode="Custom" existingResponse="PassThrough"/>