3

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

例如

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

是否有涵盖此场景的示例或文档?

4

1 回答 1

1

如果我理解正确,您正在尝试按名称而不是 id 路由。使用 RestfulRouting。

我不确定这是否 100% 可能,但您可以尝试Create Custom Routes

提供了两种额外的方法,因此您可以在需要时将自定义路由添加到路由集。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 的 Restful Routing

完整指南可以在这里找到:RestfulRouting

于 2012-10-18T21:32:10.003 回答