Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net ASP.MVC中的IgnoreRoute_Asp.net_Asp.net Mvc_Url Routing_Ignoreroute - Fatal编程技术网

Asp.net ASP.MVC中的IgnoreRoute

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

我正在尝试访问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中被破坏

谢谢 当做
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>