Response.StatusCode를 수동으로 설정하면 IIS가 응답 내용을 재정의합니다. 문제 HTTP Status응답 스트림을

문제

HTTP Status응답 스트림을 수동으로 404또는 503말로 설정하면 IIS는 사용자 지정보기 대신 기본 IIS 콘텐츠 /보기를 렌더링합니다.

웹 개발 서버 (AKA. Cassini ) 로이 작업을 수행하면 올바르게 작동합니다 (즉, 내 컨텐츠가 표시되고 response.statuscode== 입력 한 데이터).

이 동작을 무시할 수있는 방법이 있습니까?

복제하는 방법

기본 ASP.NET MVC1 웹 응용 프로그램을 만듭니다. 다음 경로를 추가하십시오

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이 아닌 응답을 가로 채고 있습니다. 확실하지 않습니다 (즉, 이것이 기본 동작인지 확실하지 않거나 시스템 구성 등에서 업데이트 된 팀 구성원 중 하나 때문입니다.)

어쨌든, 여기서 핵심은 IIS가 200이 아닌 상태 결과 리소스를 처리하지 않도록 지시하는 것 입니다.

어떻게? web.config의 구성 항목

<system.webServer>
    <httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough"/>
    .... snipped other IIS relevant elements ...
</system.webServer>

여기서 핵심은 existingResponse="PassThrough"입니다. 그 나쁜 소년은 IIS가 HTTP 상태 코드! = 200이면 내 자원을 내버려 두라고 말합니다.

더 많은 정보를 원하십니까? 물론 : 공식 IIS 웹 사이트에서이 요소에 대해 자세히 알아보십시오 .


답변

이를 우회하는 또 다른 방법은 ASP 응용 프로그램에서 다음 코드를 실행하는 것입니다.

Response.TrySkipIisCustomErrors = true;

출처 : /programming//a/21271085/238753


답변

일반적으로 이러한 접근 방식에주의하십시오. 404 상태에서는 뷰를 렌더링해서는 안됩니다.

  • 오류 상태 코드가 반환되면 IIS는 처리 결과가 아닌 등록 된 상태 오류 페이지를 반환한다고 생각합니다. 따라서 HTML 페이지 (또는 aspx 페이지에 대한 링크)를 넣을 수 있습니다.
    http://professionalaspnet.com/archive/2008/02/13/Enforcing-a-Custom-404-Page-in-ASP.NET.aspx
    에는 오류 페이지를 설정하는 방법에 대한 좋은 설명이 있습니다.

  • 그러나 그것은 중요하지 않습니다. 기본적으로 상당수의 브라우저는 해당 출력을 표시하지 않지만 브라우저에 설정된 것을 표시합니다. 따라서 404 페이지를 보는 사람들에게 의존한다면 그렇지 않을 수 있습니다. 브라우저에 설정된 404 페이지가 표시 될 수 있습니다.