无论如何在ajax调用中从asp.net-mvc中的服务器端异常返回原始文本而不是html?

leo*_*ora 4 c# ajax asp.net-mvc jquery exception-handling

我看到当我从ajax调用返回HttpException()时,我得到一个大的html文本.

如果我在我的控制器中做这样的事情:

   if (errors.Count > 0)
        {
            throw new HttpException(404, "This is my custom error msg");
        }
Run Code Online (Sandbox Code Playgroud)

我想要一个简单的方法来解析javascript端的错误消息.现在,当我用这样的东西看客户端的回调时

  function decodeErrorMessage(jqXHR, textStatus, errorThrown) {
Run Code Online (Sandbox Code Playgroud)

我看到jqxHR ="3",textStatus =一个非常长的html doc(带有调用堆栈和错误消息,errorThrown是"错误")

简单地传回并从http异常中显示错误的最佳方法是什么?

taw*_*man 5

而不是在控制器中抛出异常,捕获它并设置AJAX响应的响应代码:

使用JQuery查看逻辑设置:

    $("#btnRefresh").live("click", function(e) {
        $.ajax({
            type: "POST",
            url: '@Href("~/Home/Refresh")',
            data: "reportId=@Model.Id"
        })
        .done(function(message) {
            alert(message);
        })
        .fail(function(serverResponse) {
            alert("Error occurred while processing request: " + serverResponse.responseText);
        });

        e.preventDefault();
    });
Run Code Online (Sandbox Code Playgroud)

然后在您的Controller代码中捕获异常而不是抛出异常:

    [HttpPost, VerifyReportAccess]
    public ActionResult Refresh(Guid reportId)
    {
        string message;

        try
        {
            message = _publisher.RequestRefresh(reportId);
        }
        catch(Exception ex)
        {
            HttpContext.Response.StatusCode = (Int32)HttpStatusCode.BadRequest;
            message = ex.Message;
        }

        return Json(message);
    }
Run Code Online (Sandbox Code Playgroud)