2016-09-09 6 views
0

ASP.NETコアのコントローラにクエリパラメータを渡したいとします。Web ApiおよびASP.NETコアを通じてデータベース上の項目を検索する

[Produces("application/json")] 
[Route("api/Heroes")] 
public class HeroesController : Controller 
{ 
    [HttpGet] 
    [NoCache] 
    public JsonResult Get() 
    { 
     return new JsonResult(_context.Heroes.ToArray()); 
    } 

    [HttpGet("{searchTerm}", Name = "Search")] 
    //GET: api/Heroes/?searchterm= 
    public JsonResult Find(string searchTerm) 
    { 
     return new JsonResult(_context.Heroes.Where(h => hero.Name.Contains(searchTerm)).ToArray()); 
    } 
} 

私はURL /api/heroesを入力するとメソッドgetが呼び出されます。ここでは、2つの関連する方法があります。しかし、/api/heroes/?searchTerm=xxxxxと入力すると、URLにパラメータがない場合と同じGetメソッドが呼び出されます。

私には何が欠けていますか?あなたのコードに基づいて

答えて

1

あなたはこれをやろうとすることができる。

[Produces("application/json")] 
[Route("api/Heroes")] 
public class HeroesController : Controller 
{ 
    [HttpGet] 
    [NoCache] 
    //GET: api/Heroes 
    //GET: api/Heroes?searchTerm= 
    public JsonResult Get(string searchTerm) //string is nullable, so it's good for optional parameters 
    { 
     if (searchTerm == null) 
     { 
     ... 
     } 
     else 
     { 
     ... 
     } 
    } 
} 

それらは自動的にメソッドのパラメータからマッピングされているので、あなたはデコレータにクエリ文字列パラメータを入れていません。

関連する問題