ASP.MVC中的IgnoreRoute

时间:2009-11-19 19:00:11

标签: asp.net asp.net-mvc url-routing ignoreroute

我正在尝试访问views目录中的.js文件。 我有一个带/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中打破脚本调试。

由于 问候 克雷格。

4 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:6)

使用DefaultHttpHandler这不是更好的解决方案 对于html资源并保留所有其他类型文件的HttpNotFoundHandler

<httpHandlers>  
  <add path="*.html" verb="*" type="System.Web.DefaultHttpHandler"/> 
  <add path="*.*" verb="*" type="System.Web.HttpNotFoundHandler"/> 
</httpHandlers> 

答案 2 :(得分:1)

实际上,对于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>

显然System.Web.DefaultHttpHandler仅适用于IIS经典模式。

答案 3 :(得分:0)

在MVC 4中,我必须更新处理程序部分以及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>