【发布时间】:2026-01-30 17:55:02
【问题描述】:
简短的问题:为什么在一个操作中包含额外的异常文本,而它们都以应该防止它的通用方式处理?
说明:我的 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 覆盖,通用消息被传递给客户端,但实际异常也被传递。
我真的无法区分这 2 个 ajax 调用之间的区别以及为什么它们会返回不同的结果。
【问题讨论】:
-
您是如何调用 DoSomething() 操作方法的?阿贾克斯?
-
是的,使用 jquery ajax。我可能需要发布更多详细信息或更改问题,因为我可能没有正确描述问题。
-
实际上我已经尝试过上述场景,但在这两种情况下它都只返回有效的 json reslut
-
是的,我认为这可能与 ActionResult 没有任何关系。我要换个问题
标签: asp.net-mvc exception-handling actionresult