O que é routes.IgnoreRoute (“{resource} .axd / {* pathInfo}”)


Respostas:


81

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.


5
Tenho certeza de que você gostaria que as pessoas pudessem baixar os "arquivos axd" em seu site, pois eles contêm javascript e estilos.
Moulde,

3
Esta resposta está incorreta. A razão para colocar IgnoreRoutena configuração de roteamento do MVC é garantir que o MVC não tente lidar com a solicitação. Isso ocorre porque os .axdterminais precisam ser manipulados por outro manipulador HTTP (um manipulador que não faz parte do MVC) para servir scripts.
NightOwl888

1
Isso é totalmente desnecessário no .NET core? Pesquisei no Google por mais ou menos uma hora e não consigo encontrar nenhuma referência de quais seriam as etapas equivalentes, então estou assumindo que simplesmente não são necessárias.
Dinerdo

35

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

O AssemblyResourceLoaderirá 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 .axdsolicitações. Por quê? Porque o próprio MVC é um HttpHandler semelhante a .axde .aspxe 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 AssemblyResourceLoadersabe como fazer isso. MVC sabe fazer, bem, tudo o que faz que está além do escopo desta pergunta e resposta.


2
Esta definitivamente com certeza deveria ser a resposta aceita, mais uma minha.
Yahya

Finalmente, uma explicação clara do que WebResource.axd realmente faz, ao mesmo tempo que fornece uma resposta clara à pergunta. Obrigado
ben_mj

18

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 .



7

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.


resposta mais relevante, eu diria.
Sakthivel
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.