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

前端之家收集整理的这篇文章主要介绍了如何通过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"}) 
{
    <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);
    }
}

任何帮助将非常感谢:)

解决方法

看起来IIS正在吃响应,并尝试用它自定义错误的东西.

尝试设置

Response.TrySkipIisCustomErrors = true

在你的赶上

或者设置以下配置值:

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

猜你在找的JavaScript相关文章