如何使用MVC中的新属性路由创建捕获所有路由?
我试过这个:[Route("{pagenode}", Order = 999)]
但是当我有一个像[Route("contact"]这样的指定路线
我得到了"Multiple controller types were found that match the URL. This can happen if attribute routes on multiple controllers match the requested URL."错误。
发布于 2014-03-25 12:28:08
不能使用属性路由来完成此操作,请使用MVC4方式:
在您的路由器中映射一条路线如下:
routes.MapRoute("RouteName","{*url}",new { controller = "YourFancyController", action = "YourAction" });这将是你的必经之路。
如果您想将所有路线映射到它们的控制器,您可以这样做:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
AreaRegistration.RegisterAllAreas();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}发布于 2015-05-06 19:54:20
如果路径中的第一个“目录”是固定的,那么这可以通过属性路由来完成。
例如,要匹配任何命中/questions、/questions/4或/questions/answers/42的内容,则需要使用[Route("questions/{*catchall}"]。
发布于 2014-08-14 05:50:17
这样做的能力肯定已经改变了。
在我的默认控制器中,仍然被称为'Home‘,我有一个结果方法,我希望对一个未被识别的URL结构执行它。路由属性是:[Route("{*catchall}")]。这对于任何旧事物都是成功执行的。
我有第二个方法,它总是基于它的路由成功地执行(我向它抛出了几个路由‘样式’,以查看它是否总是工作的。)我只能假设框架总是在最后注册所有捕获路径,因为这就是我看到的行为。
这也是一个全新的、没有配置的MVC 5项目(除了nuGet包之外),但我的方法已经更改为返回JsonResult (甚至还没有完成他们的工作,但返回了很少匿名类型的对象)。例如,catch-all返回:Json(new { Message = "Invalid Request" },JsonRequestBehavior.AllowGet)。是的,是的,我首先设置了StatusCode等等,这与我的项目无关;)
我相信我没有遗漏任何东西,因为它是如此之少,但如果需要任何澄清,我会考虑加入它。
https://stackoverflow.com/questions/22538574
复制相似问题