如何区分基于ASP.NET核心属性的重载函数路由

时间:2017-12-22 14:20:16

标签: c# asp.net-core asp.net-web-api-routing asp.net-core-routing

是否可以区分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

这样的正斜杠

1 个答案:

答案 0 :(得分:4)

你不能有两个这样的行动,没有。调用操作时,它只会查看是否提供了所需的参数,并忽略了操作不需要的任何提供的参数。

因此,调用id=1&name=NewYork将与GetCity (int id)匹配,因为它只需idname将被忽略。

但当然它也与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) {
        ...
    }