ASP.Net MVC4中.js URL的路由
在我的路由注册的底部,如果一个URL有一个ASP.Net MVC4中.js URL的路由,asp.net,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-routing,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc Routing,在我的路由注册的底部,如果一个URL有一个.js扩展名,我想用一个特定的控制器来处理它(大多数.js内容是静态提供的,但有些是特殊的,需要通过控制器提供)。但是,正在跳过下面的路由,而catch-all路由正在处理该请求 routes.MapRoute("ContentScript", "{script}.js", new { controller = "Content", action = "Script" }, new[] { "NameSpace.Controllers" }
.js
扩展名,我想用一个特定的控制器来处理它(大多数.js内容是静态提供的,但有些是特殊的,需要通过控制器提供)。但是,正在跳过下面的路由,而catch-all路由正在处理该请求
routes.MapRoute("ContentScript", "{script}.js",
new { controller = "Content", action = "Script" },
new[] { "NameSpace.Controllers" }
);
routes.IgnoreRoute("{*path}",
new { path = new RegexConstraint(@"[^?]*\.(gif|jpe?g|png|ico|js|swf|css|txt|html?|xml|pdf)") }
);
正确的方法是什么
在这之后的路由中,每个剩余的请求都是这样路由的(这可以工作并捕获.js文件),因此问题不在任何部分,而是在url
参数中):
我还尝试了以下方法,但没有成功:
routes.MapRoute("ContentScript", "{*script}",
new { controller = "Content", action = "Script" },
new { script = new RegexConstraint("\\.js$") },
new[] { "NameSpace.Controllers" }
);
您必须将处理程序添加到web.config,以便它能够处理它。。。 诸如此类的事情:
<system.webserver>
<handlers>
<add name="scripts" path="*.js" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
</handlers>
</system.webserver>
问题是我不知道的一个IgnoreRoute
(RouteRegistry.cs文件有1469行长…我还没有完整地研究它)。js文件是在托管代码中处理的——在我的路由能够处理请求之前,它们就已经被删除了
routes.MapRoute("ContentScript", "{script}.js",
new { controller = "Content", action = "Script" },
new[] { "NameSpace.Controllers" }
);
routes.IgnoreRoute("{*path}",
new { path = new RegexConstraint(@"[^?]*\.(gif|jpe?g|png|ico|js|swf|css|txt|html?|xml|pdf)") }
);
下一个路由处理.js文件,因此此答案不正确。