我正在尝试学习新的MVC 6.我之前从未使用过Microsoft MVC框架。 我试图通过使用控制器的URL(urlhelper)添加指向控制器的不同操作的链接来增强简单的教程Web API(主控制器显示API可以执行的操作)。 但是当我使用:
this.Url.Action("Get", new {id = id});
我得到一个带URL的查询字符串。我想要一个更加宁静的网址。
我认为在使用属性路由时,我不必像我在WebApi的旧教程中看到的那样映射特定路由。
我是否必须映射路线? 我需要做些什么才能获得更加宁静的网址风格?
答案 0 :(得分:3)
您可以在控制器中为路径属性添加名称,然后使用扩展方法IUrlHelper.RouteUrl
生成网址。
例如,给定以下web 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...
}
您可以使用api/users/123
为特定的ID by动作生成网址@Url.RouteUrl("UsersGet", new { id = 123 })
。
使用Url.Action
扩展方法时的问题是,如果你有一个类似于上面例子中的控制器,其中有2个动作名为&#34; Get&#34;,这将使用没有参数的动作路径并生成/api/Users?id=123
。但是,如果您对该方法发表评论,您会看到@Url.Action("Get", "Users", new { id = 123 })
也为您提供了预期的网址。