Como posso passar vários parâmetros para métodos Get em um controlador MVC 6. Por exemplo, eu quero ser capaz de ter algo como o seguinte.
[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)
{
}
}
Então posso consultar como.
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
fonte
fonte
Por que não usar apenas uma ação do controlador?
Outra opção é usar o roteamento de atributo, mas você precisará ter um formato de URL diferente:
fonte
Para analisar os parâmetros de pesquisa do URL, você precisa anotar os parâmetros do método do controlador com
[FromQuery]
, por exemplo:fonte
[HttpGet]
anotações extras , os diferentes nomes de métodos e a rota específica em[Route]
- as rotas devem ser totalmente explícitas agora, o que elimina alguns problemas possíveis.Acho que a maneira mais fácil é simplesmente usar
AttributeRouting
.fonte
int paramOne, string paramTwo
Eu sugeriria usar um objeto dto separado como argumento:
Dotnet irá mapear os campos para o seu objeto.
Isso tornará muito mais fácil passar seus parâmetros e resultará em um código muito mais claro.
fonte
Para chamar get com vários parâmetros no núcleo da API da web
fonte
Para adicionar mais detalhes sobre a sobrecarga que você perguntou em seu comentário após outra resposta, aqui está um resumo. Os comentários no
ApiController
mostram qual ação será chamada com cadaGET
consulta:Você só precisaria de uma única rota para isso, caso esteja se perguntando:
e você pode testar tudo com esta visão MVC, ou algo semelhante. Sim, eu sei que você não deve misturar JavaScript com marcação e não estou usando bootstrap como você faria normalmente, mas isso é apenas para fins de demonstração.
fonte
NB-I removido FromURI. Ainda posso passar o valor da URL e obter o resultado. Se alguém souber de benfifts usando fromuri, me avise
fonte
Você pode simplesmente fazer o seguinte:
Se você precisar acessar cada elemento separadamente, basta consultar
Request.Query
.fonte
Os métodos devem ser assim:
Observe que o segundo método retorna uma matriz de objetos e o nome do controlador está em plurar (Pessoas, não Pessoa).
Então, se você quiser obter o recurso por id, ele será:
se você quiser pegar objetos por algum critério de pesquisa, como nome e etc, você pode fazer a pesquisa assim:
E avançando, se você quiser receber os pedidos dessa pessoa (por exemplo), deve ser assim:
E método no mesmo controlador:
fonte
fonte
Maneira mais simples,
Controlador:
Pedido do carteiro:
Ponto de aprendizagem: Solicitar padrão exato será aceito pelo Controlador.
fonte