【发布时间】:2015-11-29 15:20:00
【问题描述】:
我正在研究一些 Web Api 方法,并遇到了一个场景,其中我们传递了三种不同类型的参数:数字、字符串和字母数字值。
这是我的路由信息:
string alphanumeric = @"^[a-zA-Z]+[a-zA-Z0-9,_ -]*$";
string numeric = @"^\d+$";
config.Routes.MapHttpRoute(
name: "DefaultApiControllerActionName",
routeTemplate: "api/{controller}/{action}/{name}",
defaults: null,
constraints: new { action = alphanumeric }
);
config.Routes.MapHttpRoute(
name: "DefaultApiControllerActionId",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: null,
constraints: new { action = alphanumeric, id = numeric }
);
有了这条路线信息,我可以获得字符串和字母数字值,但不能获得数字(通过相同的方法)。这是我的代码:
public IEnumerable<Deliveries> GetByAdvanced(string name)
{
var deliveries = ...
return deliveries;
}
例如示例 Web API 网址
- 作品http://localhost:64288/Api/Deliveries/GetByAdvanced/Hello
- 作品http://localhost:64288/Api/Deliveries/GetByAdvanced/ab12345
- 失败http://localhost:64288/Api/Deliveries/GetByAdvanced/12345
现在,如果我添加另一种方法来处理 int 值,它工作得非常好。例如下面的代码
public IEnumerable<Deliveries> GetByAdvanced(int id)
{
var deliveries = ...
return deliveries;
}
这是接受这些值的正确方式吗?
【问题讨论】:
标签: c# asp.net-mvc-4 asp.net-web-api2 asp.net-web-api