【发布时间】:2021-05-04 01:59:59
【问题描述】:
在 ASP.NET MVC 5 中,我发出一个客户端 (JavaScript) ajax 请求,如果从 API 接收到错误消息,我想将此消息发送到客户端
我在配置文件中使用错误处理:
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="400"/>
<remove statusCode="403"/>
<remove statusCode="404"/>
<remove statusCode="500"/>
<error statusCode="400" path="/SystemPages/OtherError" responseMode="ExecuteURL"/>
<error statusCode="403" path="/SystemPages/Login" responseMode="Redirect"/>
<error statusCode="404" path="/SystemPages/NotFoundError" responseMode="ExecuteURL"/>
<error statusCode="500" path="/SystemPages/InternalServerError" responseMode="ExecuteURL"/>
</httpErrors>
我在过滤器中有一个错误处理:
public class ExceptionAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
...
在 JavaScript 代码中,如果响应代码与 2XX 不匹配,我将显示错误:
$.ajax({
type: "POST",
url: '/api/xxx',
data: JSON.stringify({ ids: invoiceIds }),
contentType: "application/json",
success: function (data) {
successToast("Success result ....bla bla bla.", "Success");
window.location.reload(false);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
let errorMessage = errorThrown;
if (XMLHttpRequest.responseText != null && XMLHttpRequest.responseText != '') {
errorMessage = XMLHttpRequest.responseText;
}
errorToast(errorMessage, "Error");
}
});
问题是这样的:如果我从 API 收到错误(例如,状态码 = 400),我可以在过滤器中处理它,并且我想用相同的方式向客户端发送服务器响应响应正文中的错误代码和错误文本。但在这种情况下(由于错误代码 = 400),模块 httpError 被触发并将其视图插入到响应中。而且我丢失了原始错误描述短信。
也许你可以
a) 在特定情况下以某种方式停止 httpErrors 模块的操作,或者
b) 以某种方式将我需要的消息传递给httpErrors 模块调用的控制器代码?
【问题讨论】:
标签: c# ajax asp.net-mvc error-handling