为什么在web api中指定路由参数类型?

时间:2016-07-12 16:16:40

标签: c# asp.net-mvc asp.net-web-api

我有一个带有路由参数的web api端点。它可以使用或不使用route参数类型。我只是想知道为什么在下面的代码中指定它?

[HttpGet]
[Route("{myId:int}")]
public HttpResponseMessage GetData([FromUri] int myId)
{
    //code here
}

此代码段[Route("{myId:int}")]。为什么要指定int?此[FromUri] int myId中已有一个int。这条路线的int不是多余的吗?这有什么理由吗?

1 个答案:

答案 0 :(得分:17)

请看这个例子:

[Route("users/{id:int}"]
public User GetUserById(int id) { ... }

[Route("users/{name}"]
public User GetUserByName(string name) { ... }

这里,只有在URI的“id”段是整数时才会选择第一个路由。否则,将选择第二条路线。

所以在你的情况下,它不是必需的。但如果您需要更智能的路线解决方案,那将是必要的。您可以使用许多不同的约束。例如{x:minlength(10)} - 最小长度为10的字符串。{x:max(10)} - 匹配最大值为10的整数。{x:regex(^\d{3}-\d{3}-\d{4}$)} - 正则表达式约束等。

您可以在documentation中找到所有可用的约束。