在路由注册的底部附近,如果网址有.js
扩展名,我想用特定的控制器来处理它(大多数.js内容是静态提供的,但有些是特殊的,需要通过控制器提供服务)。但是,正在跳过以下路由,并且catch-all路由正在处理请求。
routes.MapRoute("ContentScript", "{script}.js",
new { controller = "Content", action = "Script" },
new[] { "NameSpace.Controllers" }
);
这样做的正确方法是什么?
在该路径之后的路由中,每个剩余的请求都是这样路由的(这会使和捕获.js文件),所以问题不在于{{1}参数):
url
我也尝试了以下内容,但没有成功:
routes.MapRoute("ContentScript", "{*path}",
new { controller = "Content", action = "Index" },
new[] { "NameSpace.Controllers" }
);
答案 0 :(得分:0)
你必须在web.config中添加处理程序,以便它可以处理它... 有点像这样:
<system.webserver>
<handlers>
<add name="scripts" path="*.js" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
</handlers>
</system.webserver>
答案 1 :(得分:0)
问题是IgnoreRoute
,我不知道(RouteRegistry.cs文件长达1,469行......我还没有完整地研究它)。 js文件正在托管代码中处理 - 在我的路由可以处理请求之前,它们就被这个文件取出了。
routes.IgnoreRoute("{*path}",
new { path = new RegexConstraint(@"[^?]*\.(gif|jpe?g|png|ico|js|swf|css|txt|html?|xml|pdf)") }
);