在 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.
我正在尝试学习新的 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.