实体上的 属性 作为 ASP.NET MVC 中的路由值

A property on entity as route value in ASP.NET MVC

我正在 ASP.NET MVC 5 中开发一个新项目。在许多很酷的网站上,您经常会看到这样的路由:

www.website.com/artist/vincent-van-gogh/wiki

www.website.com/artist/vincent-van-gogh/paintings

所以假设我有一个如下所示的实体 Artist

namespace BB.DOMAIN.Entities
{
    public class Artist
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}

而且我想通过 URL 中的 .Name 属性 查看任何给定艺术家的详细信息,如上所示?

有没有一种方法可以在 ASP.NET MVC 中实现这一点,而无需创建数千个独特的路由?

你会有这样的路线:

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{artistName}/{action}",
        defaults: new { controller = "Artist", action = "Index" }
    );

然后在您的 ArtistController 中您将执行如下操作:

public ActionResult Wiki(string artistName)
{
    var artist = MyContext.Artists.SingleOrDefault(x => x.Name == artistName);
    //now you have the artist you want.
}