0

私は、これは仕事をこのWebAPIのコントローラーGETALLまたはコール<strong>API /フー/ MyController/1</strong>場合、いくつかのIdを

[Route("api/Foo/MyController/{id}")] 
public IHttpActionResult Get(int id) 
{ 
    //Code code 
    foo(id); // Foo accept Int or Null 
} 

のようなコントローラを持っていますが、私は、API/Fooの/ MyControllerコールを必要と取得"GetAll"のように、パラメータIDは現在nullで、コントローラには何も返されません。どうしたらいいですか?

[Route("api/Foo/MyController")] 
public IHttpActionResult Get() 
{ 
    //Code code 
} 

編集:

答えて

0
ます。また、オプションのパラメータを行うことができ

あなたは、オプションのパラメータを使用することができ、同じ方法を再利用します
[Route("api/Foo/MyController/{id}")] 
public IHttpActionResult Get(int? id = null) 
{ 
    IQueryable foo = GetData(); 
    if (id.HasValue) 
    { 
     foo = foo.Where(e => e.Id == id.Value); 
    } 
    //... 
} 
3

あなたは新しい方法とルートを追加することができます

[Route("api/Foo/MyController/{id}")] 
    public IHttpActionResult Get(int? id) 
    { 
     if (id.HasValue) 
     { 
      // get by id 
     } 
     else 
     { 
      // get all 
     } 
    } 
+0

+1です。確かに、しかし、私は、同じ方法でこれを含めるいくつかの方法が存在すると思う、別の取得しないでください。よろしくお願いします。 –

+1

@nimeshjmはここで絶対に正しいです。あなたはデフォルト値を使用してすべてを単一のAPIに結合することができますが、2つを分離するのがより一般的です(特に、データを取得するコードブロックが異なるため)。 – ipshing

1

2つの別々の方法がない理由:

[Route("api/Foo/")] 
public IHttpActionResult GetAll() 
{ 
    // code 
} 

[Route("api/Foo/{id}")] 
public IHttpActionResult GetById(int id) 
{ 
    // code 
} 

明確にするために(可読性、保守性、サポート性)。

関連する問題