当我重写异常消息时,为什么异常消息返回给客户端?



简短的问题:为什么在一个Action中包含额外的异常文本,当它们都以通用的方式处理时,应该防止它?

解释:我有一些通用的错误处理代码在我的mvc.net 4应用程序。任何未处理的异常都会被记录下来,并作为结果的一部分返回一条通用消息。我通过创建一个覆盖OnException的基控制器类来做到这一点。它看起来像这样。

protected override void OnException(ExceptionContext filterContext){
  ...//Some logging stuff
   filterContext.ExceptionHandled = true;
        Response.StatusCode = (int)HttpStatusCode.BadRequest;
        filterContext.Result = new JsonResult
        {
            Data = new { Message = "An error has occured. If you continue to experience this issue, please contact an administrator.", success = false },
            JsonRequestBehavior = JsonRequestBehavior.AllowGet
        };
}

应该返回一个JSON对象,其中包含一个通用的错误消息。responseText看起来像

"{ Message = "An error has occured. If you continue to experience this issue, please contact an   administrator.", success = false }" 

当该消息返回时,它由一个泛型javascript函数处理:

function HandleServerError(response) {
   var message = JSON.parse(response.responseText).Message;
   ShowMessage(message, true);
   HideProgress();
}
在大多数情况下,这可以很好地工作。例如,我有一个方法,它使用ajax在服务器上保存一些数据,并接收JSON消息作为返回。
function ChangeSecurityStatus(securityID, isActive) {
ShowProgress();
$.ajax({
    url: "SetSecurityIsActiveStatus",
    data: { "securityID": securityID, "isActive": isActive },
    type: "POST",
    success: function (result) {
        ShowMessage(result.Message);
        HideProgress();
    }
});

}

SetSecurityIsActiveStatus是一个JsonResult,当前被设置为自动抛出一个带有消息"Its Broken!"的异常。当它失败时,它将进入通用错误处理程序客户端。

还有另一个ajax调用似乎工作方式不同。它看起来像这样:

function SetStatus(action, id, status) {
ShowProgress();
$.ajax({
    url: "SetSecurityContentIsActiveStatus",
    type: "POST",
    data: { "id": id, "status": status },
    success: function (result) {
        if (result)
            ShowMessage("Action is successfully saved.");
        else
            ShowMessage("There is an issue saving your action.", true);
    },
    complete: function (request, textStatus) {
        HideProgress();
    }
});

}

SetSecurityContentIsActiveStatus是一个JsonResult,当前设置为自动抛出一个异常消息"Its Broken!"当我发出这个请求时,我得到的响应是这个

   "Its Broken!{ Message = "An error has occured. If you continue to experience this issue, please contact an   administrator.", success = false }" 

这不是一个有效的json字符串,当我调用json .parse时抛出错误。它正确地通过OnException覆盖运行,通用消息被传递给客户端,但实际的异常也被传递。

我真的不能告诉两个ajax调用之间的区别,为什么他们会返回不同的结果。

问题是其中一个控制器有一个处理错误的自定义属性。它将在我的基本控制器上处理错误,因此两个消息都被传递。

最新更新