【问题标题】:Routing for .js URL in ASP.Net MVC4ASP.Net MVC4 中 .js URL 的路由
【发布时间】:2014-04-20 12:19:41
【问题描述】:

在我的路由注册的底部附近,如果 URL 具有 .js 扩展名,我想用特定的控制器处理它(大多数 .js 内容是静态提供的,但有些是特殊的,需要提供通过控制器)。但是,正在跳过以下路由,并且包罗万象的路由正在处理请求。

routes.MapRoute("ContentScript", "{script}.js",
   new { controller = "Content", action = "Script" },
   new[] { "NameSpace.Controllers" }
);

这样做的正确方法是什么?

在那之后的路由中,每个剩余的请求都像这样路由(这有效并且捕获了 .js 文件),所以问题不在于任何部分,而是url 参数):

routes.MapRoute("ContentScript", "{*path}",
   new { controller = "Content", action = "Index" },
   new[] { "NameSpace.Controllers" }
);

我也尝试了以下方法,但没有成功:

routes.MapRoute("ContentScript", "{*script}",
   new { controller = "Content", action = "Script" },
   new { script = new RegexConstraint("\\.js$") },
   new[] { "NameSpace.Controllers" }
);

【问题讨论】:

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


    【解决方案1】:

    您必须将处理程序添加到 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

    【讨论】:

    • 下一个路由处理 .js 文件,所以这个答案不正确。
    【解决方案2】:

    问题是我不知道的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)") }
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 2016-06-20
      • 1970-01-01
      • 2013-03-13
      • 1970-01-01
      相关资源
      最近更新 更多