是否可以区分API路由以实现重载功能?
例如,我有以下功能:
[HttpGet("filter")]
public JsonResult GetCity (int id) { ... }
[HttpGet("filter")]
public JsonResult GetCity (int id, string name) { ... }
如果用户通过
调用它,我想调用第一个函数http://localhost:5000/api/cities/filter?id=1
并使用
调用第二个http://localhost:5000/api/cities/filter?id=1&name=NewYork
我们能用建议的格式实现吗?
我的意思是?paramter=value
没有像http://localhost:5000/api/cities/filter/1/NewYork
答案 0 :(得分:4)
你不能有两个这样的行动,没有。调用操作时,它只会查看是否提供了所需的参数,并忽略了操作不需要的任何提供的参数。
因此,调用id=1&name=NewYork
将与GetCity (int id)
匹配,因为它只需id
,name
将被忽略。
但当然它也与GetCity (int id, string name)
匹配。
如果未提供name
,您只能保留一个操作并调用另一种方法,如下所示:
[HttpGet("filter")]
public JsonResult GetCity(int id, string name) {
if (name == null) return GetCityWithId(id);
...
}
private JsonResult GetCityWithId(int id) {
...
}