RestfulRouting for .Net更改默认'id'参数

时间:2012-10-10 19:16:23

标签: .net asp.net-mvc

非常基本的问题,但我似乎无法在文档中找到它。我一直在将RestfulRouting(通过nuget)集成到一个Mvc 4应用程序中,但是在某些情况下调整参数更好,或者更改名称或者在控制器动作中有多个参数。

e.g。

/resource/:id/:slug

public ActionResult Show(int id, string slug) { return View(); }

/resource/:custom_param_name

public ActionResult Show(string custom_param_name) { return View(); }

是否有涵盖此方案的示例或文档?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你正在尝试使用RestfulRouting Route by name, not by id.

我不确定它是否100%可行,但您可以尝试创建自定义路线

提供了另外两种方法,以便您可以根据需要向路径集添加自定义路由。 Map是一种可链接的方法,允许您添加标准映射。路由是一种允许您向路由集添加自定义路由的方法。

e.g。

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>();
    }
}

如何使用:Restful Routing for ASP .NET MVC

完整指南可在此处找到:RestfulRouting