2

オーバーロード関数用にAPIルーティングを区別することは可能ですか?例えばオーバーロード関数用にASP.NETコア属性ベースのルーティングを区別する方法

私は、次の機能があります。

[HttpGet("filter")] 
public JsonResult GetCity (int id) { ... } 

[HttpGet("filter")] 
public JsonResult GetCity (int id, string name) { ... } 

私は、ユーザーが

http://localhost:5000/api/cities/filter?id=1 

を通してそれを呼び出して使用して2番目を呼び出す場合は、最初の関数を呼び出したい

http://localhost:5000/api/cities/filter?id=1&name=NewYork 

提案された形式でそれを達成できますか?

私は前方と?paramter=valueないと意味がありません、あなたがそのような二つの作用を持つことができませんhttp://localhost:5000/api/cities/filter/1/NewYork

+0

アクションメソッドはオーバーロードをサポートしていません:あなたは何ができるか

nameは、このように、提供されていない場合、1つのアクションだけを保持し、別のメソッドを呼び出しています。 –

答えて

4

のようにスラッシュ。アクションを呼び出すときには、必要なパラメータが提供されているかどうかだけが調べられ、必要のないパラメータは無視されます。

したがって、id=1&name=NewYorkを呼び出すのはidであり、nameは無視されるため、GetCity (int id)と一致します。

しかし、もちろんそれはGetCity (int id, string name)にもマッチします。

[HttpGet("filter")] 
    public JsonResult GetCity(int id, string name) { 
     if (name == null) return GetCityWithId(id); 
     ... 
    } 

    private JsonResult GetCityWithId(int id) { 
     ... 
    } 
関連する問題