【问题标题】:MVC Route Attribute finds multiple controller typesMVC Route Attribute 找到多个控制器类型
【发布时间】:2017-03-13 10:59:03
【问题描述】:

我有 2 条路线匹配,但是我需要它们都匹配。 我不能使用 GUID 或 INT,我需要它是字符串。

只有当它不匹配其他任何东西时才应该采用这条路线。

[Route("{slug}", Order = 1)]

这条路线应该一直走

[Route("eula", Order = 0)]

关于如何实现这一点的任何想法? 我认为订购可能会起作用,但它显然不起作用

显示我的确切问题: Route parameters and multiple controller types

重现错误:

RouteConfig.cs:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapMvcAttributeRoutes();
    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

控制器:

public class HomeController : Controller
{
    [Route("eula")]
    public ActionResult Eula()
    {
        ViewBag.Message = "Your application description page.";

        return View();
    }
}

public class SlugController : Controller
{
    [Route("{slug}")]
    public ActionResult SluggedUrl(string slug)
    {
        ViewBag.Message = "Your " + slug;

        return View();
    }
}

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-routing


    【解决方案1】:

    Slug 控制器路由过于笼统。 Order 属性也适用于同一控制器中的操作。

    建议:为 slug 添加一个基于约定的路由

    public static void RegisterRoutes(RouteCollection routes) {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
        routes.MapMvcAttributeRoutes();
    
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    
        //catch all route
        routes.MapRoute(
            name: "Slug",
            url: "{*slug}",
            defaults: new { controller = "Slug", action = "SluggedUrl"}
        );
    }
    

    并删除属性路由形式SlugController

    public class SlugController : Controller {
        public ActionResult SluggedUrl(string slug) {
            ViewBag.Message = "Your " + slug;
    
            return View();
        }
    }
    

    这样,更具体的eula 属性路由将在更一般的slug 路由之前得到匹配

    【讨论】:

      猜你喜欢
      • 2018-07-22
      • 1970-01-01
      • 2016-07-27
      • 1970-01-01
      • 2023-04-06
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多