Wie kann ich mehrere Parameter an Get-Methoden in einem MVC 6-Controller übergeben? Zum Beispiel möchte ich in der Lage sein, so etwas wie das Folgende zu haben.
[Route("api/[controller]")]
public class PersonController : Controller
{
public string Get(int id)
{
}
public string Get(string firstName, string lastName)
{
}
public string Get(string firstName, string lastName, string address)
{
}
}
So kann ich gerne abfragen.
api/person?id=1
api/person?firstName=john&lastName=doe
api/person?firstName=john&lastName=doe&address=streetA
c#
asp.net-core
asp.net-core-routing
mstrand
quelle
quelle
Warum nicht nur eine Controller-Aktion verwenden?
Eine andere Option ist die Verwendung des Attribut-Routings. Dann benötigen Sie jedoch ein anderes URL-Format:
quelle
Um die Suchparameter aus der URL zu analysieren, müssen Sie die Parameter der Controller-Methode mit folgenden Anmerkungen versehen
[FromQuery]
:quelle
[HttpGet]
Anmerkungen, die verschiedenen Methodennamen und die spezifische Route an[Route]
- die Routen sollten jetzt vollständig explizit sein, wodurch einige mögliche Probleme beseitigt werden.Ich denke, der einfachste Weg ist, einfach zu benutzen
AttributeRouting
.quelle
int paramOne, string paramTwo
Ich würde vorschlagen, ein separates dto-Objekt als Argument zu verwenden:
Dotnet ordnet die Felder Ihrem Objekt zu.
Dies erleichtert das Durchlaufen Ihrer Parameter erheblich und führt zu einem viel klareren Code.
quelle
Zum Aufrufen get mit mehreren Parametern im Web-API-Core
quelle
Im Folgenden finden Sie eine Zusammenfassung, um weitere Details zu der Überlastung hinzuzufügen, nach der Sie in Ihrem Kommentar nach einer anderen Antwort gefragt haben. Die Kommentare in der
ApiController
Show zeigen, welche Aktion bei jederGET
Abfrage aufgerufen wird :Sie würden dafür nur eine einzige Route benötigen, falls Sie sich fragen:
und Sie könnten alles mit dieser MVC-Ansicht oder etwas Ähnlichem testen. Ja, ich weiß, dass Sie JavaScript nicht mit Markup mischen sollen, und ich verwende Bootstrap nicht wie normalerweise, aber dies dient nur zu Demozwecken.
quelle
NB-Ich habe FromURI entfernt. Trotzdem kann ich einen Wert von der URL übergeben und ein Ergebnis erhalten. Wenn jemand Benfifts mit fromuri kennt, lass es mich wissen
quelle
Sie können einfach Folgendes tun:
Wenn Sie auf jedes Element separat zugreifen müssen, lesen Sie einfach
Request.Query
.quelle
Methoden sollten so sein:
Beachten Sie, dass die zweite Methode ein Array von Objekten zurückgibt und der Name des Controllers in Plurar steht (Personen nicht Person).
Wenn Sie also eine Ressource anhand ihrer ID erhalten möchten, ist dies:
Wenn Sie Objekte anhand einiger Suchkriterien wie Vorname usw. übernehmen möchten, können Sie wie folgt suchen:
Wenn Sie beispielsweise die Bestellungen dieser Person annehmen möchten, sollte dies folgendermaßen aussehen:
Und Methode im selben Controller:
quelle
quelle
Einfachster Weg,
Regler:
Postbotenanfrage:
Lernpunkt: Das genaue Muster anfordern wird vom Controller akzeptiert.
quelle