ASP.NET MVC 4 "wants" 我的自定义路由的尾部斜杠
ASP.NET MVC4 "wants" a tailing slash for my custom route
我的 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
但是,以下 URL 有效:
http://localhost:59174/Replays/kgm3eauw.zbg/raha5qit.ikp.pls/
所以当我添加尾部斜杠时,ASP 选择正确的路线,否则它不会。此时添加尾部斜杠不是一个选项,因为 URLs 将由外部脚本生成。我只通过
http://localhost:59174/Replays/kgm3eauw.zbg/
对于脚本,实际的文件名将由脚本生成 - 没有尾部斜杠。
所以我的问题是:如何让第一个URL调用"right"方法?
另外:是否有关于 RouteConfig 确切工作原理的文档?到目前为止我还没有找到太多。
我想问题在于,它希望您的 URL 指向一个文件并绕过 ASP.NET MVC 路由引擎。您必须让 所有 请求通过 ASP.NET 才能让它匹配看起来也像文件的 URL。
您可以在 web.config
文件中进行设置。添加:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
我的 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
但是,以下 URL 有效:
http://localhost:59174/Replays/kgm3eauw.zbg/raha5qit.ikp.pls/
所以当我添加尾部斜杠时,ASP 选择正确的路线,否则它不会。此时添加尾部斜杠不是一个选项,因为 URLs 将由外部脚本生成。我只通过
http://localhost:59174/Replays/kgm3eauw.zbg/
对于脚本,实际的文件名将由脚本生成 - 没有尾部斜杠。
所以我的问题是:如何让第一个URL调用"right"方法?
另外:是否有关于 RouteConfig 确切工作原理的文档?到目前为止我还没有找到太多。
我想问题在于,它希望您的 URL 指向一个文件并绕过 ASP.NET MVC 路由引擎。您必须让 所有 请求通过 ASP.NET 才能让它匹配看起来也像文件的 URL。
您可以在 web.config
文件中进行设置。添加:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>