2016-05-27 7 views
0

Ich versuche, einen Webdienst von PHP zu ASP.NET MVC zu portieren. Was natürlich bedeutet, dass ich die vorhandene API duplizieren muss.ASP.NET MVC Routing: Mehrere Parameter in URL

Derzeit ein Anruf, in es kanonische Form ist wäre wie:

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

aber es nimmt auch eine alternative Form:

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

Es gibt etwa fünf verschiedene Such Kriterien, alle optional, und sie können in beliebiger Reihenfolge angegeben werden.

Wie macht man das in ASP.NET MVC Routing?

+0

Entschuldigung für die Veröffentlichung eines Duplikats. Ich habe unter "routing" gesucht und vergessen, "route" zu prüfen –

Antwort

1

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.