我有一个网站,我想要
/22 Redirect to
/user/22
等等,但是还有其他mvc视图和控制器,它们都可以正常工作,我使用了以下路由,但它不起作用。
routes.MapRoute(
"Final",
"{id}",
new { controller = "Root", action = "Index"},
new { id = @"\d+" },
new string[] { "MyWebApp.Controllers" }
);
理想情况下,只有当url片段为数字时,此路由才有效。
我在MyWebApp.Controllers命名空间中也有一个RootController。它所做的就是重定向到下面的其他页面,
public class RootController : Controller
{
public ActionResult Index(long id) {
return RedirectPermanent("/user/" + id);
}
}
现在,我们必须这样做,因为它是对旧网站的升级,我们无法更改网址方案,因为它是公开的并且正在使用中。
注意:URL / user / 22等正常工作,只有这个根URL出现问题。
答案 0 :(得分:2)
我已经测试了这条路线:
routes.MapRoute(
"Final",
"{id}",
new { controller = "Root", action = "Index" },
new { id = @"\d+" }
);
它正如它应该的那样工作。但是,如果您遇到问题,我猜您所需的URL与之前的其他路由匹配。把这条路线作为你的第一条路线,看看是否能修好它。
例如,如果您的路线如下所示:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"Final",
"{id}",
new { controller = "Root", action = "Index" },
new { id = @"\d+" }
);
您将获得 404资源未找到。但如果你这样切换它们:
routes.MapRoute(
"Final",
"{id}",
new { controller = "Root", action = "Index" },
new { id = @"\d+" }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
然后,您将通过/1234
等请求获得所需的路由。