2017-08-07 10 views
2

あなたの検索対象に応じて人のリストを取得するAPIを作成しようとしています - 電話番号、メール、名前APIをルーティングしてクエリ文字列を使用するにはどうすればよいですか?

私の問題はこのようなことをするAPIをどのようにルーティングするのか分かりません。 ..

[HttpGet, Route("SearchBy/{**searchByType**}/people")] 
[NoNullArguments] 
[Filterable] 
public IHttpActionResult FindPeople([FromUri] string searchByType, object queryValue) 
{ 
    var response = new List<SearchSummary>(); 
    switch (searchByType) 
    { 
     case "PhoneNumber": 
      response = peopleFinder.FindPeople((PhoneNumber)queryValue); 
      break; 
     case "Email": 
      response = peopleFinder.FindPeople((Email)queryValue); 
      break; 
     case "Name": 
      response = peopleFinder.FindPeople((Name) queryValue); 
      break; 
    } 
    return Ok(response); 
} 

私はSearchByオブジェクトを作成し、そこからメンバーに渡すか、多分何とかenumまたは定数を使用していますか?

答えて

1

私はちょっと変わったことをアドバイスします。最初にルートテンプレートをもう少しRESTfulに変更することができます。次に、あなたの下に横たわっているデータソースは、検索でもう少し具体化することができます。

//Matches GET ~/people/phone/123456789 
//Matches GET ~/people/email/[email protected] 
//Matches GET ~/people/name/John Doe 
[HttpGet, Route("people/{searchByType:regex(^phone|email|name$)}/{filter}")] 
[NoNullArguments] 
[Filterable] 
public IHttpActionResult FindPeople(string searchByType, string filter) { 
    var response = new List<SearchSummary>(); 
    switch (searchByType.ToLower()) { 
     case "phone": 
      response = peopleFinder.FindPeopleByPhone(filter); 
      break; 
     case "email": 
      response = peopleFinder.FindPeopleByEmail(filter); 
      break; 
     case "name": 
      response = peopleFinder.FindPeopleByName(filter); 
      break; 
     default: 
      return BadRequest(); 
    } 
    return Ok(response); 
} 

参考:Attribute Routing in ASP.NET Web API 2

関連する問題