ASP.NET MVC4 “想要”我的自定义路由的尾部斜杠

本文关键字:路由 尾部 自定义 我的 MVC4 NET 想要 ASP | 更新日期: 2023-09-27 18:34:00

我的 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"操作无法执行:

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

但是,以下 URL 有效:

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

因此,当我添加尾部斜杠时,ASP 会选择正确的路由,否则不会。 目前无法选择添加尾尾斜杠,因为 URL 将由外部脚本生成。我只通过

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

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

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

另外:是否有任何关于 RouteConfig 如何工作的文档?到目前为止,我还没有找到太多。

ASP.NET MVC4 “想要”我的自定义路由的尾部斜杠

我想

问题是期望您的URL指向文件并绕过 ASP.NET MVC路由引擎。您必须让所有请求都通过 ASP.NET,以便让它在看起来像文件的URL上匹配。

您可以在web.config文件中设置此设置。添加这个:

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