在 MVC 6 控制器 (vNext) 中使用 urlhelper 生成 link

Generating link using urlhelper in MVC 6 controller (vNext)

我正在尝试学习新的 MVC 6。我以前从未使用过 Microsoft MVC 框架。 我正在尝试通过使用控制器的 URL(urlhelper)添加指向我的控制器的不同操作的链接来增强一个简单的教程网络 API(家庭控制器显示 API 可以做什么) . 但是当我使用:

this.Url.Action("Get", new {id = id});

我得到一个带有 URL 的查询字符串。我想要更 restful 风格的 URL.

我认为在使用属性路由时,我不必像在 WebApi 的旧教程中看到的那样映射特定路由。

我必须绘制路线吗? 我需要做什么才能获得更多 restful URL 风格?

您可以在控制器中为路由属性添加名称,然后使用扩展方法IUrlHelper.RouteUrl生成url。

例如,给定以下网络 api 控制器:

[Route("api/[controller]")]
public class UsersController : Controller
{
    // GET: api/users
    [HttpGet]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET api/users/5
    [HttpGet("{id}", Name ="UsersGet")]
    public string Get(int id)
    {
        return "value";
    }

    //additional methods...
}

您可以使用 @Url.RouteUrl("UsersGet", new { id = 123 }) 为特定的 get by id 操作生成 url api/users/123

使用 Url.Action 扩展方法时的问题是,如果您有一个控制器,如上例所示,有 2 个名为 "Get" 的动作,这将使用没有参数的动作路由,并且生成 /api/Users?id=123。但是,如果您对该方法发表评论,您会看到 @Url.Action("Get", "Users", new { id = 123 }) 也为您提供了预期的 url.