Jak mogę przekazać wiele parametrów, aby uzyskać metody w kontrolerze MVC 6. Na przykład chcę mieć coś takiego, jak to.
[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)
{
}
}
Więc mogę zapytać jak.
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
źródło
źródło
Dlaczego nie użyć tylko jednej akcji kontrolera?
Inną opcją jest użycie routingu atrybutów, ale wtedy potrzebny byłby inny format adresu URL:
źródło
Aby przeanalizować parametry wyszukiwania z adresu URL, musisz dodać adnotację do parametrów metody kontrolera
[FromQuery]
, na przykład:źródło
[HttpGet]
adnotacje, różne nazwy metod i konkretną trasę w[Route]
- trasy powinny być teraz w pełni jawne, co eliminuje kilka możliwych problemów.Myślę, że najłatwiej jest po prostu użyć
AttributeRouting
.źródło
int paramOne, string paramTwo
Sugerowałbym użycie oddzielnego obiektu dto jako argumentu:
Dotnet zamapuje pola na Twój obiekt.
Ułatwi to przejście przez parametry i da w wyniku znacznie jaśniejszy kod.
źródło
Aby wywołać get z wieloma parametrami w rdzeniu interfejsu API sieci Web
źródło
Aby dodać więcej szczegółów na temat przeciążenia, o które pytałeś w swoim komentarzu po innej odpowiedzi, oto podsumowanie. Komentarze na ekranie
ApiController
pokazują, która akcja zostanie wywołana przy każdymGET
zapytaniu:Potrzebowałbyś do tego tylko jednej trasy, na wypadek gdybyś się zastanawiał:
i możesz to wszystko przetestować z tym widokiem MVC lub czymś podobnym. Tak, wiem, że nie powinno się mieszać JavaScript ze znacznikami i nie używam bootstrapu tak, jak zwykle, ale to jest tylko do celów demonstracyjnych.
źródło
NB-Usunąłem FromURI. Mimo to mogę przekazać wartość z adresu URL i uzyskać wynik.Jeśli ktoś zna zalety korzystania z fromuri, daj mi znać
źródło
Możesz po prostu wykonać następujące czynności:
Jeśli chcesz uzyskać dostęp do każdego elementu osobno, po prostu zapoznaj się z
Request.Query
.źródło
Metody powinny wyglądać następująco:
Zwróć uwagę, że druga metoda zwraca tablicę obiektów, a nazwa kontrolera jest w liczbie mnogiej (Persons not Person).
Więc jeśli chcesz uzyskać zasób przez id, będzie to:
jeśli chcesz wziąć obiekty według jakichś kryteriów wyszukiwania, takich jak imię itp., możesz przeprowadzić takie wyszukiwanie:
I idąc naprzód, jeśli chcesz przyjąć zamówienia tej osoby (na przykład), powinno wyglądać tak:
I metoda w tym samym kontrolerze:
źródło
źródło
Najprostszy sposób,
Kontroler:
Prośba listonosza:
Punkt nauki: Żądanie dokładnego wzoru zostanie zaakceptowane przez kontrolera.
źródło