0

我在按下按钮时有一个 ajax 调用。如果我有customErrors mode="On"并且找不到我的 ajax 请求 URI,则404html 将作为200状态返回给请求。

web.config

<customErrors mode="On" defaultRedirect="/Errors">
  <error statusCode="404" redirect="~/Errors/Error404" />
</customErrors>

JS 在按钮单击时运行。

$.get(api_uri, function (json) {
    console.log(json);
    options.element_to_inject.html(compiled_template(json));
    options.status_container.hide();
}).fail(function () {
    options.status_container.hide();
    options.element_to_inject.html("Error").show();
});

我的 AJAX 请求调用了我的控制器方法。

public JsonResult Get(int? id)
{
    // Do work
}

console.log(json)如上所示正在输出我的404html。如果我转身customErrors mode="Off",我会根据需要返回一个实际的404响应代码。

想法:就好像我需要 ajax 请求来忽略 custom 404

如何customErrors mode="On"获得不返回404html 的请求?

4

1 回答 1

0

错误网址是控制器/操作吗?如果是这样,请使用

if (Request.IsAjaxRequest())
{
     Response.StatusCode = 404;
     Response.TrySkipIisCustomErrors = true;
}

更新

404 的问题在于它通常是由框架在到达您的代码之前生成的。您不能使用customError标签处理它,但无论请求是否为 AJAX 请求,它都将适用。如果您想使用自定义错误页面来处理它,但希望保留错误代码,请重定向到控制器/操作以生成自定义错误页面,并作为操作的一部分,设置响应代码并关闭 IIS 处理自定义错误。注意:您只能对 AJAX 请求执行此操作,方法是检查它是否是 AJAX 请求,如果是,则仅设置响应代码。

于 2013-03-24T19:58:05.017 回答