IgnoreRoute在ASP.MVC
-
21-09-2019 - |
题
我试图访问一个js文件在views目录。 我有/Views/Home/MyControl.ascx MVC应用程序 我有一个JS文件/Views/Home/MyControl.js
我想引用js文件并与控制保持它。 我曾尝试在路由以下条目,并没有似乎工作。
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(/.*)?" });
请帮忙,请不要建议增加的js文件的脚本目录。 我想使它以这种方式工作,或者知道它为什么不能这样做。
我把脚本到页面,仅脚本调试在VS2010 B2断裂。
由于 问候 克雷格。
解决方案
在Views
文件夹是,为良好的观点,和javascript应别处放。这就是为什么MVC框架的设计者把web.config
在拒绝访问内的任何文件,该文件夹Views
。您可以修改此defaut设置,但警告说,这可能是一个潜在的安全漏洞。所以打开位于web.config
文件夹中的文件Views
和
替换:
<httpHandlers>
<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
使用:
<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>
导航到http://yoursite/Views/test.js
P.S。你也可以删除所有你把IgnoreRoutes
的global.asax
。
其他提示
这是不是可以使用DefaultHttpHandler更好的解决方案 为HTML资源并保持HttpNotFoundHandler对于所有其它类型的文件
<httpHandlers>
<add path="*.html" verb="*" type="System.Web.DefaultHttpHandler"/>
<add path="*.*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
实际上为IIS集成模式,则需要使用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>
在IIS经典模式显然System.Web.DefaultHttpHandler
才起作用。
在MVC 4 I不得不更新处理程序部以及所述HttpHandlers的部分。
我更新与以下Views文件夹中的web.config。
<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>
不隶属于 StackOverflow