如何使用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."
错误。
答案 0 :(得分:16)
这可以通过属性路由完成,如果路径中的第一个“目录”是固定的。
例如,要匹配点击/questions
或/questions/4
或/questions/answers/42
的任何内容,您可以使用[Route("questions/{*catchall}"]
。
答案 1 :(得分:3)
您无法通过属性路由执行此操作,请按照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 });
}
答案 2 :(得分:-1)
执行此操作的能力必须已更改。
在我的默认控制器中,仍称为“Home'我有一个结果方法,我想为无法识别的URL结构执行。路由属性是:[Route("{*catchall}")]
。对于任何旧事物都可以成功执行。
我有第二种方法,总是根据其路线成功执行(我已经抛出一些路线'样式'在它上面看它是否总是有效)。我只能假设框架总是最后注册catch-all路由,因为这是我看到的行为。
这也是一个全新的,没有配置(除了nuGet包)MVC 5项目,除了我的方法已被更改为返回JsonResult(甚至没有完成他们的工作但返回一些匿名类型的对象)。例如,catch-all返回:Json(new { Message = "Invalid Request" }
,JsonRequestBehavior.AllowGet
)。是的,是的我先设置了StatusCode等等,这不是关于我的项目;)。
我确定我没有留下任何东西,因为它很少,但如果需要任何澄清,我会看到添加它。