Respostas:
Os arquivos .axd não existem fisicamente. O ASP.NET usa URLs com extensões .axd (ScriptResource.axd e WebResource.axd) internamente e são manipulados por um HttpHandler.
Portanto, você deve manter esta regra, para evitar que a ASP.NET MVC tente lidar com a solicitação em vez de permitir que o HttpHandler dedicado o faça.
IgnoreRoute
na configuração de roteamento do MVC é garantir que o MVC não tente lidar com a solicitação. Isso ocorre porque os .axd
terminais precisam ser manipulados por outro manipulador HTTP (um manipulador que não faz parte do MVC) para servir scripts.
Alguns Antecedentes
Se você abrir este arquivo:
%WINDIR%\Microsoft.NET\Framework\version\Config\Web.config
você encontrará isso no arquivo:
<add path="WebResource.axd"
verb="GET"
type="System.Web.Handlers.AssemblyResourceLoader"
validate="True" />
Isso basicamente diz ao tempo de execução do Asp.NET: "Ei, cara do asp.net, se uma solicitação vier para WebResource.axd, use AssemblyResourceLoader para processar a solicitação."
Por favor, nota que WebResource.axd não é um arquivo , mas simplesmente um mapa (se assim posso dizer) para AssemblyResourceLoader
. É o nome com o qual o manipulador está registrado. Em minha máquina, encontrei os seguintes manipuladores .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"
Ok, então o que esse manipulador faz?
O AssemblyResourceLoader
sabe como procurar arquivos embutidos dentro de um assembly para que possa servi-lo (enviá-lo ao cliente, ou seja, um navegador). Por exemplo, em formulários da web do asp.net, se você usar os controles de validação, eles dependem de algum javascript para mostrar os erros na página da web. No entanto, esse javascript está embutido em uma montagem. O navegador precisa do javascript, então você verá isso no html da página:
<script src="/YourSite/WebResource.axd?d=fs7zUa...&t=6342..." type="text/javascript"></script>
O AssemblyResourceLoader
irá encontrar o assembly onde o javascript está embutido usando as informações na querystring e retornar o javascript.
Voltar para a pergunta
Então, para responder à pergunta, o que é:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
Isso diz ao mecanismo de roteamento que não processaremos as solicitações que correspondem a esse padrão de rota. Em outras palavras, não processaremos .axd
solicitações. Por quê? Porque o próprio MVC é um HttpHandler semelhante a .axd
e .aspx
e muitos outros manipuladores que estão no arquivo web.config. O manipulador MVC não sabe como processar a solicitação, como procurar recursos incorporados em um assembly - ele AssemblyResourceLoader
sabe como fazer isso. MVC sabe fazer, bem, tudo o que faz que está além do escopo desta pergunta e resposta.
A rota com o padrão {resource} .axd / {* pathInfo} é incluída para evitar que as solicitações dos arquivos de recursos da Web, como WebResource.axd ou ScriptResource.axd, sejam passadas para um controlador.
Leia o link: http://msdn.microsoft.com/en-us/library/cc668201%28v=vs.100%29.aspx
Você também pode especificar que o roteamento não deve lidar com certas solicitações de URL. Você evita que o roteamento manipule certas solicitações definindo uma rota e especificando que a classe StopRoutingHandler deve ser usada para lidar com esse padrão. Quando uma solicitação é tratada por um objeto StopRoutingHandler , o objeto StopRoutingHandler bloqueia qualquer processamento adicional da solicitação como uma rota. Em vez disso, a solicitação é processada como uma página ASP.NET, serviço da Web ou outro ponto de extremidade ASP.NET. Você pode usar o método RouteCollection.Ignore (ou RouteCollectionExtensions.IgnoreRoute para aplicativos MVC) para criar rotas que usam a classe StopRoutingHandler .
Dê uma olhada no link abaixo: http://haacked.com/archive/2008/07/14/make-routing-ignore-requests-for-a-file-extension.aspx
Esses não são arquivos (eles não existem no disco) - são apenas nomes sob os quais alguns gerenciadores de HTTP são registrados.