首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC 5 AttributeRouting捕获所有

MVC 5 AttributeRouting捕获所有
EN

Stack Overflow用户
提问于 2014-03-20 16:00:54
回答 3查看 6.9K关注 0票数 11

如何使用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."错误。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-25 12:28:08

不能使用属性路由来完成此操作,请使用MVC4方式:

在您的路由器中映射一条路线如下:

代码语言:javascript
复制
routes.MapRoute("RouteName","{*url}",new { controller = "YourFancyController", action = "YourAction" });

这将是你的必经之路。

如果您想将所有路线映射到它们的控制器,您可以这样做:

代码语言:javascript
复制
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 });
}
票数 3
EN

Stack Overflow用户

发布于 2015-05-06 19:54:20

如果路径中的第一个“目录”是固定的,那么这可以通过属性路由来完成。

例如,要匹配任何命中/questions/questions/4/questions/answers/42的内容,则需要使用[Route("questions/{*catchall}"]

票数 20
EN

Stack Overflow用户

发布于 2014-08-14 05:50:17

这样做的能力肯定已经改变了。

在我的默认控制器中,仍然被称为'Home‘,我有一个结果方法,我希望对一个未被识别的URL结构执行它。路由属性是:[Route("{*catchall}")]。这对于任何旧事物都是成功执行的。

我有第二个方法,它总是基于它的路由成功地执行(我向它抛出了几个路由‘样式’,以查看它是否总是工作的。)我只能假设框架总是在最后注册所有捕获路径,因为这就是我看到的行为。

这也是一个全新的、没有配置的MVC 5项目(除了nuGet包之外),但我的方法已经更改为返回JsonResult (甚至还没有完成他们的工作,但返回了很少匿名类型的对象)。例如,catch-all返回:Json(new { Message = "Invalid Request" }JsonRequestBehavior.AllowGet)。是的,是的,我首先设置了StatusCode等等,这与我的项目无关;)

我相信我没有遗漏任何东西,因为它是如此之少,但如果需要任何澄清,我会考虑加入它。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22538574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档