asp.net-mvc – REST样式URL的路由

我希望设置路由以允许以下内容:

/entity/id          //id is Guid
/entity/id          //id is int32
/entity/actionname  //actionname is string matching neither Guid nor Int

简单,我想,这就是RouteConstraints解决的问题:

routes.MapRoute(
    name: "entity/id:guid",
    template: "{controller}/{id:guid}",
    defaults:new{action="Index"});
routes.MapRoute(
    name: "entity/id:int",
    template: "{controller}/{id:int}",
    defaults: new { action = "Index" });
routes.MapRoute(
    name: "entity/action",
    template: "{controller=home}/{action=index}");

在这里,我相信,订单很重要:更具体的匹配必须在实体/行动路线之前,否则将匹配所有.

但这不起作用.

@Url.Action("", "entity", new { id = Guid.NewGuid() })

结果是

entity?id=00000000-0000-0000-0000-000000000000

代替

entity/00000000-0000-0000-0000-000000000000

我该如何解决?

(我在asp.net Core 1.1上,虽然我相信这个问题对MVC4有效)

最佳答案 如果您将操作名称“Index”或传递null作为第一个参数传递,它将生成预期结果.

点赞