Eu estou usando a API da Web .Net MVC4 para (espero) implementar uma API RESTful. Preciso passar alguns parâmetros para o sistema e fazê-lo executar alguma ação e, em seguida, retornar uma lista de objetos como resultado. Especificamente, estou passando em duas datas e retornando registros que caem entre elas. Também acompanho os registros retornados para que as chamadas subseqüentes não sejam reprocessadas no sistema.
Eu considerei algumas abordagens:
Serializando os parâmetros em uma única cadeia JSON e separando-a na API. http://forums.asp.net/t/1807316.aspx/1
Passe os parâmetros na string de consulta.
Qual é a melhor maneira de passar vários parâmetros de consulta para uma API repousante?Definindo os parâmetros na rota: api / controller / date1 / date2
Usando um POST que inerentemente me permite passar um objeto com parâmetros.
Pesquisando ODATA desde a API da Web (atualmente) suporta. Ainda não fiz muito com isso, então não estou muito familiarizado com isso.
Parece que as práticas REST adequadas indicam quando os dados são extraídos, você deve usar um GET. No entanto, o GET também deve ser nulipotente (não produz efeitos colaterais), e me pergunto se minha implementação específica viola isso, já que marquei registros no sistema da API, portanto, estou produzindo efeitos colaterais.
Também me levou à questão de suportar parâmetros variáveis. Se a lista de parâmetros de entrada mudar, seria tedioso redefinir sua rota para a Opção 3 se isso acontecer muito. E o que pode acontecer se os parâmetros forem definidos em tempo de execução ...
De qualquer forma, para minha implementação específica, qual opção (se houver) parece melhor?
Eu acho que a maneira mais fácil é simplesmente usar
AttributeRouting
.É óbvio dentro do seu controlador, por que você quer isso no seu global
WebApiConfig
de arquivo?Exemplo:
Os
{}
nomes precisam corresponder aos seus parâmetros.Simples assim, agora você tem um separado
GET
que lida com vários parâmetros neste exemplo.fonte
WebApiConfig
arquivo, mas isso é realmente melhor.Route
para parâmetros nomeados (por exemplo, parâmetros de consulta)?Basta adicionar uma nova rota às
WebApiConfig
entradas.Por exemplo, para ligar para:
adicionar:
Em seguida, adicione os parâmetros à chamada HTTP:
fonte
api/controller?start=date1&end=date2
estilo URI.Eu apenas tive que implementar uma API RESTfull onde eu preciso passar parâmetros. Eu fiz isso passando os parâmetros na string de consulta no mesmo estilo descrito no primeiro exemplo de Mark "api / controller? Start = date1 & end = date2"
No controlador, usei uma dica do URL dividido em c #?
No meu caso, eu estava chamando o WebApi via Ajax da seguinte forma:
Eu espero que isso ajude...
fonte
Encontrei solução excelente em http://habrahabr.ru/post/164945/
fonte
Get
), ainda poderá usar[FromUri]
? Parece que não consigo fazer isso funcionar.O uso de GET ou POST é explicado claramente por @LukLed . Em relação às maneiras pelas quais você pode passar os parâmetros, sugiro seguir a segunda abordagem (também não sei muito sobre o ODATA ).
Isso não é fácil de usar e de SEO
Esta é a abordagem preferível usual.
Definitivamente, essa não é uma boa abordagem. Isso faz parecer que alguém
date2
é um sub-recursodate1
e esse não é o caso. Os parâmetros de consultadate1
edate2
são e vem no mesmo nível.Em um caso simples, eu sugeriria um URI como esse,
Mas eu pessoalmente gosto do padrão URI abaixo, mas, neste caso, precisamos escrever um código personalizado para mapear os parâmetros.
fonte
Use a Ligação de Parâmetros conforme descrito aqui: http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api
fonte
Os parâmetros do link raiz ({one}, {two}) e os parâmetros da função Get (um, dois) devem ser iguais
fonte
Eu sei que isso é muito antigo, mas eu queria a mesma coisa recentemente e aqui está o que eu encontrei ...
Então agora em seu endereço / URI / ...
http (s): // myURL / api / myController /? var = getnew & test = test
Resultado: "Teste Encontrado"
http (s): // myURL / api / myController /? var = getnew & test = qualquer coisa
Resultado: "Não foi possível encontrar esse teste"
fonte
Agora você pode fazer isso simplesmente usando
isso retornará: "value: 5 10"
se você chamá-lo com https: // seudominio / api / seuscontrolador? id = 5 & abc = 10
fonte
fonte