在ASP.Net MVC4中路由.js URL

时间:2014-03-15 00:26:48

标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

在路由注册的底部附近,如果网址有.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" }
);

2 个答案:

答案 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>

stackoverflow link #1

stackoverflow link #2

答案 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)") }
);