私が正しく理解していれば、ID ではなく名前でルーティングしようとしています。RestfulRouting で。
100% 可能かどうかはわかりませんが、Create Custom Routesを試すことができます。
必要に応じてルート セットにカスタム ルートを追加できるように、2 つの追加の方法が提供されています。Map は、標準のマッピングを追加できる連鎖可能なメソッドです。Route は、カスタム ルートをルート セットに追加できるようにするメソッドです。
例えば
Map("posts/{year}/{slug}")
.To<PostsController>(x => x.Post(-1, ""))
.Constrain("slug", @"\w+")
.Constrain("year", @"\d+");
Route(new Route("posts/{action}",
new RouteValueDictionary(new { controller = "posts" }),
new MvcRouteHandler());
また
Map("resource/{custom_param}")
.To<ResourcesController>(x => x.Resource(-1, ""))
.Constrain("custom_param", @"\w+");
Route(new Route("resource/custom",
new RouteValueDictionary(new { controller = "resource" }),
new MvcRouteHandler());
したがって、次を使用できます。
public ActionResult Custom(string custom_param) { return View(); }
それの使い方 ?
public class Routes : RouteSet
{
public override void Map(Mapper map)
{
map.Root<HomeController>(x => x.Show());
map.Path("test/{id}").To<TestController>(x => x.Test()).Constrain("id", @"\d+");
map.Resource<SessionsController>();
map.Resources<BlogsController>(blogs =>
{
blogs.As("weblogs");
blogs.Only("index", "show");
blogs.Collection(x => {
x.Get("latest");
x.Post("someaction");
);
blogs.Member(x => x.Put("move"));
blogs.Resources<PostsController>(posts =>
{
posts.Except("create", "update", "destroy");
posts.Resources<CommentsController>(c => c.Except("destroy"));
});
});
}
}
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RestfulRoutingViewEngine());
RouteTable.Routes.MapRoutes<Routes>();
}
}
使用方法: ASP .NET MVC の安らかなルーティング
これに関する完全なガイドはここにあります: RestfulRouting