Sie können so etwas versuchen.
[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 :)");
}
Der letzte Parameter mit *
Präfix ist wie ein catch-alle Parameter, die etwas in der URL nach dem Buch/Suche gespeichert werden.
Wenn Sie also yoursite.com/book/search/title/nice/author/jim
anfordern, wird der Standardmodellbinder den Wert "title/nice/author/jim" dem Kriterienparameter zuordnen. Sie können die Split
-Methode für diese Zeichenfolge aufrufen, um ein Array mit URL-Segmenten abzurufen. Dann wandeln Sie die Werte in ein Wörterbuch um und verwenden Sie das für Ihren Suchcode.
Grundsätzlich wird der obige Code aus dem übergelaufenen Array lesen und den Wert von knownCriteria
Wörterbuch-Elemente basierend auf dem, was Sie in Ihrer URL übergeben.
Entschuldigung für die Veröffentlichung eines Duplikats. Ich habe unter "routing" gesucht und vergessen, "route" zu prüfen –