Response.StatusCode를 수동으로 설정하면 IIS가 응답 내용을 재정의합니다.


20

문제

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();
    }
}

답변:


18

확인-답을 찾았습니다. 예상대로 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 웹 사이트에서이 요소에 대해 자세히 알아보십시오 .


httpErrors 오류 페이지-> 500-> 기능 설정 편집-> "상세한 오류"와 같습니다.? _http : //stackoverflow.com/questions/2640526/detailed-500-error-message-asp-iis-7-5_
Kiquenet

aaaahhh .. 쉬운 일을 어렵게 만드는 좋은 ol 'IIS :)
AR

4

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

Response.TrySkipIisCustomErrors = true;

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


-2

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

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

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


1
404에서 뷰를 렌더링하지 않아야하는 이유는 무엇입니까? 사용자 정의 페이지를 원하고 정적 HTML 오류 페이지 대신 일부 페이지에 논리가 필요할 수 있습니다.
Pure.Krome

MVC 모델은 IIS 오류 페이지 모델과 통합되지 않기 때문입니다. 간단합니다. 이를 위해 IIS 모델로 돌아 가야합니다. 404 사례에 대한 페이지 URL을 등록하십시오. 동적 페이지를 넣으십시오. 실제로 MVC URL을 가리킬 수 있는지 확실하지 않지만 404 페이지 등록에서 발생합니다.
TomTom

잘못되었습니다. 대부분의 브라우저는 404 HTTP 상태로 리턴 된 페이지의 컨텐츠를 렌더링합니다. 전부는 아니지만 대부분. 또한 IIS는 기본적으로 다른 모듈이 나중에 파이프 라인에서 재정의하지 않는 한 .NET 사이트의 모든 코드에서 설정 한 상태 코드를 준수합니다. 이 경우 어떻게 발생했는지에 대한 질문 작성자의 답변을 참조하십시오.
Mufasa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.