如何区分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) {
        ...
    }