Ignoreroute em asp.mvc
-
21-09-2019 - |
Pergunta
Estou tentando acessar um arquivo .js no diretório de visualizações. Eu tenho um aplicativo MVC com /Views/home/mycontrol.ascx eu tenho um arquivo js /views/home/mycontrol.js
Desejo fazer referência ao arquivo .js e mantê -lo com o controle. Eu tentei as seguintes entradas no roteamento e nenhuma parece funcionar.
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{file}.js");
routes.IgnoreRoute("{resource}.js/{*pathInfo}");
routes.IgnoreRoute("{controller}/{resource}.js/{*pathInfo}");
routes.IgnoreRoute("{*alljs}", new { alljs = @".*\.js(/.*)?" });
Por favor, ajude, não sugira adicionar o arquivo .js ao diretório de scripts. Eu gostaria de fazê -lo funcionar dessa maneira ou saber por que isso não pode ser feito.
Eu colocaria o script na página, apenas a depuração do script está quebrada no VS2010 B2.
Obrigado Atenciosamente Craig.
Solução
o Views
A pasta é, bem, para visualizações, e o JavaScript deve ser colocado em outro lugar. É por isso que os designers da estrutura do MVC colocam um web.config
nisso Views
Pasta que nega o acesso a qualquer arquivo dentro. Você pode modificar essa configuração de festas, mas estar avisado de que esse pode ser um potencial buraco de segurança. Então abra o web.config
arquivo localizado no Views
pasta e:
Substituir:
<httpHandlers>
<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
com:
<httpHandlers>
<add path="*.aspx" verb="*" type="System.Web.HttpNotFoundHandler"/>
<add path="*.master" verb="*" type="System.Web.HttpNotFoundHandler"/>
<add path="*.ascx" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
Navegar para http://yoursite/Views/test.js
Ps você também pode remover todos os IgnoreRoutes
você coloca global.asax
.
Outras dicas
Não seria uma solução melhor usando o DefaultTtphandler para recursos HTML e mantendo o HttpnotfoundHandler para todos os outros tipos de arquivo
<httpHandlers>
<add path="*.html" verb="*" type="System.Web.DefaultHttpHandler"/>
<add path="*.*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
Na verdade, para o modo integrado do IIS, você precisa usar System.Web.StaticHttpHandler
:
<httpHandlers>
<add path="*.css" verb="*" type="System.Web.StaticHttpHandler"/>
<add path="*.js" verb="*" type="System.Web.StaticHttpHandler"/>
<add path="*.*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
Aparentemente System.Web.DefaultHttpHandler
Funciona apenas no modo clássico do IIS.
No MVC 4, tive que atualizar a seção Handler, bem como a seção Httphandlers.
Atualizei o web.config na pasta Views com a seguinte.
<httpHandlers>
<add path="*.aspx" verb="*" type="System.Web.HttpNotFoundHandler"/>
<add path="*.cshtml" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
<handlers>
<remove name="BlockViewHandler" />
<add name="BlockViewHandlerRazor" path="*.cshtml" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
<add name="BlockViewHandlerAspx" path="*.aspx" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>