뭐가 routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
프로젝트에서 .axd 파일을 찾을 수 없습니다.이 경로 규칙을 제거 할 수 있습니까?
답변:
.axd 파일은 물리적으로 존재하지 않습니다. ASP.NET은 내부적으로 .axd 확장명 (ScriptResource.axd 및 WebResource.axd)을 가진 URL을 사용하며 HttpHandler에 의해 처리됩니다.
따라서 ASP.NET MVC가 전용 HttpHandler가 요청을 처리하도록하는 대신 요청을 처리하지 못하도록이 규칙을 유지해야합니다.
IgnoreRoute
MVC의 라우팅 구성에 넣는 이유 는 MVC가 요청을 처리하지 않도록하기위한 것입니다. 이는 스크립트를 제공하기 위해 .axd
엔드 포인트가 다른 HTTP 핸들러 ( MVC의 일부 가 아닌 핸들러)에 의해 처리되어야하기 때문 입니다.
몇 가지 배경
이 파일을 여는 경우 :
%WINDIR%\Microsoft.NET\Framework\version\Config\Web.config
파일에서 찾을 수 있습니다.
<add path="WebResource.axd"
verb="GET"
type="System.Web.Handlers.AssemblyResourceLoader"
validate="True" />
그것은 기본적으로 Asp.NET 런타임에 다음과 같이 말합니다. "Hey asp.net 친구, WebResource.axd에 대한 요청이 오면 AssemblyResourceLoader를 사용하여 요청을 처리하십시오."
제발 주의를 WebResource.axd와이 파일 아닙니다 에 (내가 말할 수있는 경우) 단순히지도 AssemblyResourceLoader
. 핸들러가 등록 된 이름입니다. 내 컴퓨터에서 다음 .axd 핸들러를 찾았습니다.
<add path="eurl.axd" verb="*" type="System.Web.HttpNotFoundHandler" validate="True" />
<add path="trace.axd" verb="*" type="System.Web.Handlers.TraceHandler" validate="True" />
<add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="True" />
<add verb="*" path="*_AppService.axd"
좋아요, 그 핸들러는 무엇을합니까?
는 AssemblyResourceLoader
그것을 제공 (브라우저, 즉 클라이언트로 전송) 할 수 있도록 어셈블리 내에 포함 된 파일을 찾는 방법을 알고 있습니다. 예를 들어 asp.net 웹 양식에서 유효성 검사 컨트롤을 사용하는 경우 일부 자바 스크립트에 의존하여 웹 페이지에 오류를 표시합니다. 그러나 해당 javascript는 어셈블리에 포함됩니다. 브라우저에는 javascript가 필요하므로 페이지의 html에서 다음을 볼 수 있습니다.
<script src="/YourSite/WebResource.axd?d=fs7zUa...&t=6342..." type="text/javascript"></script>
은 AssemblyResourceLoader
자바 스크립트가 쿼리 문자열의 정보를 사용하여 내장 된 어셈블리를 찾아 자바 스크립트를 반환합니다.
질문으로 돌아 가기
따라서 질문에 답하기 위해 무엇입니까?
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
이는 라우팅 엔진에 해당 경로 패턴과 일치하는 요청을 처리하지 않을 것임을 알리는 것입니다. 즉, .axd
요청을 처리하지 않습니다 . 왜? MVC 자체가 유사한 HttpHandler를하기 때문에 .axd
와 .aspx
web.config 파일에있는 다른 많은 핸들러는. MVC 핸들러는 어셈블리에 포함 된 리소스를 찾는 것과 같은 요청을 처리하는 방법을 알지 못합니다 AssemblyResourceLoader
. MVC는이 질문과 답변의 범위를 벗어난 모든 작업을 수행하는 방법을 알고 있습니다.
WebResource.axd 또는 ScriptResource.axd와 같은 웹 리소스 파일에 대한 요청이 컨트롤러로 전달되는 것을 방지하기 위해 {resource} .axd / {* pathInfo} 패턴이있는 경로가 포함됩니다.
링크 읽기 : http://msdn.microsoft.com/en-us/library/cc668201%28v=vs.100%29.aspx
라우팅이 특정 URL 요청을 처리하지 않도록 지정할 수도 있습니다. 경로를 정의하고 StopRoutingHandler를 지정하여 라우팅이 특정 요청을 처리하지 못하도록 방지합니다. 해당 패턴을 처리하는 데 클래스를 사용해야 함을 . 요청이 처리 될 때 StopRoutingHandler의 목적은 StopRoutingHandler의 대상 블록 경로와 같은 요청의 추가 처리를 행한다. 대신 요청은 ASP.NET 페이지, 웹 서비스 또는 기타 ASP.NET 끝점으로 처리됩니다. 당신은 사용할 수 있습니다 RouteCollection.Ignore의 (또는 방법 RouteCollectionExtensions.IgnoreRoute 사용 경로 생성 MVC 애플리케이션을위한)를 StopRoutingHandler의 클래스를.