ASP.NET MVC4“想要”我的自定义路由

时间:2016-02-09 10:22:57

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

我的ASP.NET MVC应用程序中有以下路由:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
       name: "AppCode",
       url: "AppCode",
       defaults: new { controller = "AppToken", action = "AuthenticateUser", authCode = UrlParameter.Optional }
   );

    routes.MapRoute(
        name: "ReplayFileRoute",
        url: "Replays/{replayName}/{fileName}",
        defaults: new { controller = "Replay", action = "GetReplayFile" }
    );

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

现在的问题是,以下URL将导致404,并且“GetReplayFile”-Action不会被执行:

  

http://localhost:59174/Replays/kgm3eauw.zbg/raha5qit.ikp.pls

但是,以下网址有效:

  

http://localhost:59174/Replays/kgm3eauw.zbg/raha5qit.ikp.pls/

所以当我添加一个拖尾斜线时,ASP会选择正确的路线,否则就不会。目前不能添加尾部斜杠,因为URL将由外部脚本生成。我只传递

http://localhost:59174/Replays/kgm3eauw.zbg/

到脚本,脚本将生成实际文件名 - 没有尾部斜杠。

所以我的问题是:如何让第一个URL调用“正确”方法?

另外:有没有关于RouteConfig如何正常工作的文档?到目前为止我还没有找到太多东西。

1 个答案:

答案 0 :(得分:0)

我想问题是希望你的URL指向一个文件并绕过ASP.NET MVC路由引擎。您必须让所有请求通过ASP.NET,以使其与看起来像文件的URL匹配。

您可以在web.config文件中进行设置。加上这个:

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>