応答ストリームのHTTP Status
を手動で404
または503
に設定すると、IISはストックを表示しますIISカスタムビューの代わりにコンテンツ/ビュー。
これをWeb開発サーバー(AKA。 Cassini )で実行すると、正しく機能します(つまり、コンテンツが表示され、response.statuscode
==入力したデータ)。
この動作を上書きできる方法はありますか?
デフォルトのASP.NET MVC1 Webアプリケーションを作成します。次のルートを追加
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{*catchall}",
new { controller = "Home", action = "Index" }
);
}
HomeControllerのIndexメソッドを次のように置き換えます...
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
Response.StatusCode = 404;
return View();
}
}
わかりました-答えを見つけました。予想どおり、IISが200以外の応答をハイジャックしています。わからない(つまり、これがデフォルトの動作であるかどうかわからないORマシン構成などで更新されたチームメンバーの1人の設定...)。
とにかく、ここで重要なのは、tell IIS tonotnon-200 status result resources)です。
どうやって? web.configの構成エントリ。
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough"/>
.... snipped other IIS relevant elements ...
</system.webServer>
ここでの鍵はexistingResponse="PassThrough"
。その悪い子は、IISに、HTTPステータスコード!= 200の場合、リソースをそのままにするように指示します。
詳細が必要ですか?もちろん: この要素の詳細については、公式のIIS Webサイト をご覧ください)。
これを回避する別の方法は、ASPアプリケーションで次のコードを実行することです。
Response.TrySkipIisCustomErrors = true;