如何区分ASP.NET重载函数的核心属性路由
How to distinguish ASP.NET Core Attribute-based Routing for Overloading Functions
重载函数是否可以区分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
这样的正斜杠
你不能有两个这样的动作,不。调用一个动作时,它只查看是否提供了所需的参数,而忽略任何提供的动作不需要的参数。
所以调用 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) {
...
}
重载函数是否可以区分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
你不能有两个这样的动作,不。调用一个动作时,它只查看是否提供了所需的参数,而忽略任何提供的动作不需要的参数。
所以调用 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) {
...
}