0

我想使用一个非常简单的人类可读的 url 进行路由,如下所示:

我想这样路由: /Controller/Title-Of-The-EF-Object

我不想要/Controller/Action/ABCDEF01-2345-6789-0ABC-DEF01234/Controller/Action/Title-Of-The-EF-Object。动作由路由处理,因此 url 应该只包含控制器和标识符字符串。

我的实体包含一个唯一的、经过净化的 UrlTitle 字符串作为属性:

public class Entity {
    [Key]
    public Guid ID { get; set; }

    //Example: "Title of the EF object"
    public string Title { get; set; }

    //Example: "Title-Of-The-EF-Object"
    public string UrlTitle { set; set; }
}

当前路线映射:

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

        routes.MapRoute(
            "Item",
            "{controller}/{UrlTitle}",
            new { controller = "{controller}", action = "Details" }
        );

问题是,在请求时/Controller/Title-Of-The-EF-Object,MVC 将其解释Title-Of-The-EF-Object为一个操作,因为 a)它是一个字符串,并且 b)它属于该段的位置,所以我不断收到 Resource Cannot Be Found。如果我使用实体的 Guid 而不是 UrlTitle,我可以让它工作,因为 MVC 会这样解释 Guid。

如何创建自定义路线图{controller}/{id_string}

4

1 回答 1

0

当我输入问题时,这发生在我身上。路线顺序错误。*0_0*

    routes.MapRoute(
        "Item",
        "{controller}/{UrlTitle}",
        new { controller = "{controller}", action = "Details" }
    );

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
于 2012-08-30T18:35:02.117 回答