我想使用一个非常简单的人类可读的 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}
?