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)404上に示したように私のhtmlを出力しています。振り返ると、必要に応じてcustomErrors mode="Off"実際の404応答コードが返されます。

考え:カスタムを無視するためにajaxリクエストが必要なよう404です。

HTMLcustomErrors mode="On"を返さないようにというリクエストをどのように取得できますか?404

4

1 に答える 1

0

エラーURLはコントローラー/アクションですか?その場合は、

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

アップデート

404の問題は、コードに到達する前にフレームワークによって生成されることが多いことです。タグで処理することはできませんがcustomError、リクエストがAJAXリクエストであるかどうかに関係なく適用されます。カスタムエラーページで処理したいがエラーコードを保持したい場合は、コントローラー/アクションにリダイレクトしてカスタムエラーページを生成し、アクションの一部として、応答コードを設定し、IIS処理をオフにします。カスタムエラー。注:これは、AJAXリクエストであるかどうかを確認し、AJAXリクエストである場合にのみ応答コードを設定することで、AJAXリクエストに対してのみ行うことができます。

于 2013-03-24T19:58:05.017 に答える