我有一个奇怪的问题。我正在处理一些设置为无扩展运行的 MVC 代码,如在/Home/Index?id=10
但是,它曾经是为 IIS 6 设置的,并且在所有控制器上使用 .mvc 扩展名,如/Home.mvc/Index?id=10
.
我希望两条路线都能工作。在我的 global.asax.cs 文件中,我创建了以下代码:
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute("Default2",
"{controller}.mvc/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute("Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
这几乎奏效了!但不幸的是,当我的控制器返回 RedirectToAction 时,生成的 URL 会失败。
我这样调用 RedirectToAction:
return RedirectToAction("Index", "Account");
它返回这个:
/Account.mvc
现在假设索引,所以我不担心它丢失了。但是,该 URL 的末尾没有/
,因此,它返回 404 错误。如果我添加/
它工作正常。有什么方法可以帮助 MVC 正确生成 URL,或者有什么方法可以修改路由以使其识别此 URL?
背景:我处于这种情况是因为在我们将网络服务器升级到 IIS 7.5 后,我开始将我的应用程序转换为使用无扩展名 URL。我没有意识到已经与外部世界共享的应用程序中有很多链接——更改为无扩展会破坏所有这些链接。嗬!应该一个人离开就好了。