문제
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;
답변
일반적으로 이러한 접근 방식에주의하십시오. 404 상태에서는 뷰를 렌더링해서는 안됩니다.
-
오류 상태 코드가 반환되면 IIS는 처리 결과가 아닌 등록 된 상태 오류 페이지를 반환한다고 생각합니다. 따라서 HTML 페이지 (또는 aspx 페이지에 대한 링크)를 넣을 수 있습니다.
http://professionalaspnet.com/archive/2008/02/13/Enforcing-a-Custom-404-Page-in-ASP.NET.aspx
에는 오류 페이지를 설정하는 방법에 대한 좋은 설명이 있습니다. -
그러나 그것은 중요하지 않습니다. 기본적으로 상당수의 브라우저는 해당 출력을 표시하지 않지만 브라우저에 설정된 것을 표시합니다. 따라서 404 페이지를 보는 사람들에게 의존한다면 그렇지 않을 수 있습니다. 브라우저에 설정된 404 페이지가 표시 될 수 있습니다.