Asp.net ASP.MVC中的IgnoreRoute
我正在尝试访问views目录中的.js文件。 我有一个带有/Views/Home/MyControl.ascx的MVC应用程序 我有一个js文件/Views/Home/MyControl.js 我希望引用.js文件并将其保存在控件中。 我在路由中尝试了以下条目,但似乎都不起作用Asp.net ASP.MVC中的IgnoreRoute,asp.net,asp.net-mvc,url-routing,ignoreroute,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"); rou
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中被破坏
谢谢
当做
Craig.视图的
文件夹非常适合视图,javascript应该放在其他地方。这就是为什么MVC框架的设计者在这个Views
文件夹中放置了一个web.config
,拒绝访问其中的任何文件。您可以修改此defaut设置,但请注意,这可能是一个潜在的安全漏洞。因此,打开Views
文件夹中的web.config
文件,然后:
替换:
<httpHandlers>
<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
与:
导航到http://yoursite/Views/test.js
另外,您还可以删除您放入global.asax中的所有IgnoreRoutes
。使用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>
显然System.Web.DefaultHttpHandler
仅在IIS经典模式下工作。在MVC4中,我必须更新handler部分以及HttpHandler部分
我用以下内容更新了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>
谢谢您的帮助。这听起来确实不对。如果我将javascript与控制器放在一起,那会是一种更好的方法吗。我真的不想把它放在general scripts文件夹中。我需要IgnoreRoute来工作吗?我知道这是一个老帖子,但天哪,这帮了我4个多小时的忙。我希望我能投20票!
<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>