2016-05-27 19 views
0

WebサービスをPHPからASP.NET MVCに移植しようとしています。もちろん、既存のAPIを複製する必要があることを意味します。ASP.NET MVCルーティング:URLの複数のパラメータ

現在、呼び出しは、それに正規形は次のようになります:約5別の検索があります

http://example.com/book/search/title/hamlet/author/shakes

:しかし、それはまた別の形式を受け入れ

http://example.com/book/search?title=hamlet&author=shakes

条件はすべてオプションで、任意の順序で指定することができます。

ASP.NET MVCルーティングではどうしたらいいですか?

+0

重複を掲載して申し訳ありません。私は "ルーティング"の下で検索し、 "ルート"のチェックを忘れた –

答えて

1

このようなことを試すことができます。

[Route("Book/search/{*criteria}")] 
public ActionResult Search(string criteria) 
{ 
    var knownCriterias = new Dictionary<string, string>() 
    { 
     {"author", ""}, 
     {"title",""}, 
     {"type",""} 
    }; 
    if (!String.IsNullOrEmpty(criteria)) 
    { 

     var criteriaArr = criteria.Split('/'); 
     for (var index = 0; index < criteriaArr.Length; index++) 
     { 

      var criteriaItem = criteriaArr[index]; 
      if (knownCriterias.ContainsKey(criteriaItem)) 
      { 
       if (criteriaArr.Length > (index + 1)) 
        knownCriterias[criteriaItem] = criteriaArr[index + 1]; 
      } 
     } 
    } 
    // Use knownCriterias dictionary now. 
    return Content("Should return the search result here :)"); 
} 

*で始まる最後のパラメータは、ブック/検索後のURLに何かを格納するキャッチオールパラメータのようなものです。

yoursite.com/book/search/title/nice/author/jimをリクエストすると、デフォルトのモデルバインダーは、 "title/nice/author/jim"という値をcriteriaパラメータにマップします。その文字列のSplitメソッドを呼び出して、URLセグメントの配列を取得できます。その後、値を辞書に変換し、検索コードに使用します。

基本的に、上記のコードは、スペリングされた配列から読み取って、あなたのURLに渡したものに基づいてknownCriteria辞書項目の値を設定します。

関連する問題