Asp.net mvc 3 MVC中的默认数字根路由
我有一个网站,我想Asp.net mvc 3 MVC中的默认数字根路由,asp.net-mvc-3,url-routing,Asp.net Mvc 3,Url Routing,我有一个网站,我想 /22 Redirect to /user/22 等等,但是还有其他mvc视图和控制器,它们都可以正常工作,我使用了下面的路线,但它不工作 routes.MapRoute( "Final", "{id}", new { controller = "Root", action = "Index"}, new { id = @"\d+" }, new string[] { "MyWebApp.Controllers" }
/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方案,因为它是公开的和正在使用的
注意:URL/user/22等工作正常,只有此根URL出现问题。我已经测试了此路由:
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+" }
);
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
);
您将得到一个未找到的404资源。但是如果你像这样切换它们:
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+" }
);
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
的请求获得所需的路由。如果我只启用一个路由,那么我将获得目录列表。相反,我应该被重定向到/user/22并得到404错误。@AkashKava重定向并得到404?我不理解你的评论。它现在可以工作了,它需要高于所有路由,而且我把IIS express设置搞砸了,它创建了一个虚拟目录,它与web.config冲突