このようなことを試すことができます。
[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
辞書項目の値を設定します。
重複を掲載して申し訳ありません。私は "ルーティング"の下で検索し、 "ルート"のチェックを忘れた –