route.IgnoreRoute (“{resource} .axd / {* pathInfo}”) 란 무엇입니까?


답변:


81

.axd 파일은 물리적으로 존재하지 않습니다. ASP.NET은 내부적으로 .axd 확장명 (ScriptResource.axd 및 WebResource.axd)을 가진 URL을 사용하며 HttpHandler에 의해 처리됩니다.

따라서 ASP.NET MVC가 전용 HttpHandler가 요청을 처리하도록하는 대신 요청을 처리하지 못하도록이 규칙을 유지해야합니다.


5
사람들이 자바 스크립트와 스타일이 포함 된 "axd 파일"을 귀하의 사이트에 다운로드 할 수 있기를 바랍니다.
Moulde 2013 년

3
이 대답은 틀 렸습니다. IgnoreRouteMVC의 라우팅 구성에 넣는 이유 는 MVC가 요청을 처리하지 않도록하기위한 것입니다. 이는 스크립트를 제공하기 위해 .axd엔드 포인트가 다른 HTTP 핸들러 ( MVC의 일부 가 아닌 핸들러)에 의해 처리되어야하기 때문 입니다.
NightOwl888

1
.NET Core에서 이것이 완전히 불필요합니까? Google에서 한 시간 정도 검색했는데 동등한 단계가 무엇인지에 대한 참조를 찾을 수 없으므로 단순히 필요하지 않다고 가정합니다.
Dinerdo

35

몇 가지 배경

이 파일을 여는 경우 :

%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...&amp;t=6342..." type="text/javascript"></script>

AssemblyResourceLoader자바 스크립트가 쿼리 문자열의 정보를 사용하여 내장 된 어셈블리를 찾아 자바 스크립트를 반환합니다.


질문으로 돌아 가기

따라서 질문에 답하기 위해 무엇입니까?

routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

이는 라우팅 엔진에 해당 경로 패턴과 일치하는 요청을 처리하지 않을 것임을 알리는 것입니다. 즉, .axd요청을 처리하지 않습니다 . 왜? MVC 자체가 유사한 HttpHandler를하기 때문에 .axd.aspxweb.config 파일에있는 다른 많은 핸들러는. MVC 핸들러는 어셈블리에 포함 된 리소스를 찾는 것과 같은 요청을 처리하는 방법을 알지 못합니다 AssemblyResourceLoader. MVC는이 질문과 답변의 범위를 벗어난 모든 작업을 수행하는 방법을 알고 있습니다.


2
이것은 확실히 받아 들여지는 대답이어야하며 나로부터 하나를 추가해야합니다.
Yahya 2017

마지막으로 WebResource.axd가 실제로 수행하는 작업에 대한 명확한 설명과 동시에 질문에 대한 명확한 답변을 제공합니다. 감사합니다
ben_mj

18

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의 클래스를.



7

이들은 파일이 아닙니다 (디스크에 존재하지 않음). 일부 HTTP 핸들러가 등록되는 이름 일뿐입니다.


내가 말하고 싶은 가장 적절한 대답.
Sakthivel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.