Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 27609|Resposta: 3

[WebAPI] A WebAPI não pode vincular múltiplos parâmetros (SB e SB1) ao conteúdo da solicitação

[Copiar link]
Publicado em 16/08/2016 13:52:38 | | | |



No WebAPI, o corpo da requisição (HttpContent) só pode ser lido uma vez, não armazenado em cache, e só pode ser lido para frente.

Por exemplo:

1. Endereço do pedido: /?id=123&name=bob

    Método do lado do servidor: void Action(int id, string name) // Todos os parâmetros são tipos simples, então todos virão da url

2. Endereço do pedido: /?id=123&name=bob

    Método do lado do servidor: void Ação([FromUri] int id, [FromUri] nome da cadeia) // Igual ao acima

                      void Action(nome da string [FromBody]); O atributo [FormBody] exibe que todo o corpo é lido como uma string como um argumento

3. Endereço do pedido: /?id=123

    Definição da Classe:

classe pública Customer { // Um tipo de objeto complexo definido
  Nome da cadeia pública { get; set; }
  public int Age { get; set; }
}

    Método do lado do servidor: void Action(int id, Customer c) // O id do parâmetro é lido da string de consulta, o parâmetro c é uma classe complexa de objeto Customer, lida do corpo através do formatador

    Método do lado do servidor: void action (Cliente c1, Cliente c2) // Erro! Múltiplos parâmetros são tipos complexos e todos tentam ler de um corpo, que só pode ser lido uma vez

    Método do lado do servidor: void action([FromUri] Cliente c1, Cliente c2) // Sim! Diferentemente da ação acima, o tipo complexo C1 será lido da URL e C2 será lido do corpo

4. Método ModelBinder:

void Action([ModelBinder(MyCustomBinder)] SomeType c) // Indica que um binder de modelo específico é usado para resolver o parâmetro

[ModelBinder(MyCustomBinder)] classe pública SomeType { } // Aplique essa regra a todos os parâmetros SomeType declarando o atributo [ModelBidner(MyCustomBinder)] a um tipo específico SomeType

void Ação(SomeType c) // Como o tipo de c é SomeType, as características em SomeType são aplicadas para determinar sua ligação ao modelo



Resumo:

1. Os parâmetros simples padrão são passados pelos parâmetros de URL, com exceções:

1.1 Se a rota contém o parâmetro id, o parâmetro id é passado pela rota;

1.2 Se o parâmetro for marcado como [FromBody], o parâmetro pode ser simples, e o cliente pode passá-lo via POST: $.ajax(url, '=valor'), ou $.ajax({url: url, data: {'': 'valor'}});

2. Os parâmetros complexos padrão (classes de entidade personalizadas) são passados via POST, com exceções:

2.1 Se o valor do parâmetro for marcado como [FromUri], o parâmetro pode ser um parâmetro complexo;

3. Um parâmetro marcado como [FromBody] pode aparecer apenas uma vez, um parâmetro marcado como [FromUri] pode aparecer várias vezes, e se o parâmetro marcado como [FromUri] for um parâmetro simples, a tag pode ser removida.




Anterior:.NET Oracle método de consulta multi-tabela, um método.
Próximo:C# usa reflexão para determinar se uma propriedade é atribuída
Publicado em 16/08/2016 15:21:29 |
ModelBinder deve ter uma classe de característica para ModelBinderAttribute

Semelhante a filtros
Publicado em 16/08/2016 15:21:44 |
Venha nos visitar todos os dias
Publicado em 16/08/2016 15:22:00 |
Me dê um pouco de prestígio
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com