Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 27609|Respuesta: 3

[WebAPI] WebAPI no puede vincular múltiples parámetros (SB y SB1) al contenido de la solicitud

[Copiar enlace]
Publicado en 16/8/2016 13:52:38 | | | |



En WebAPI, el cuerpo de la solicitud (HttpContent) solo puede leerse una vez, no almacenarse en caché, y solo puede leerse hacia adelante.

Por ejemplo:

1. Dirección de solicitud: /?id=123&name=bob

    Método del servidor: void Action(int id, string name) // Todos los parámetros son tipos simples, así que todos provendrán de la url

2. Dirección de solicitud: /?id=123&name=bob

    Método del lado del servidor: void Acción([FromUri] int id, [FromUri] nombre de cadena) // Igual que antes

                      void Action(nombre de la cuerda [FromBody]); El atributo [FormBody] muestra que todo el cuerpo se lee como una cadena como argumento

3. Dirección de solicitud: /?id=123

    Definición de clase:

Public Class Customer { // Un tipo de objeto complejo definido
  cadena pública Name { get; set; }
  public int Age { get; set; }
}

    Método lado servidor: void Action(int id, Customer c) // El id del parámetro se lee de la cadena de consulta, el parámetro c es una clase compleja de objeto Cliente, leída desde el cuerpo a través del formatador

    Método del servidor: anular acción (Cliente c1, Cliente c2) // ¡Error! Múltiples parámetros son tipos complejos y todos intentan leer de un cuerpo, que solo puede leerse una vez

    Método del servidor: acción de anulación ([FromUri] Cliente c1, Cliente c2) // ¡Sí! A diferencia de la acción anterior, el tipo complejo C1 se leerá desde la URL y C2 desde el cuerpo

4. Método ModelBinder:

void Action([ModelBinder(MyCustomBinder)] SomeType c) // Indica que se utiliza un binder de modelo específico para resolver el parámetro

[ModelBinder(MyCustomBinder)] clase pública SomeType { } // Aplica esta regla a todos los parámetros de SomeType declarando el atributo [ModelBidner(MyCustomBinder)] a un tipo específico SomeType

void Action(SomeType c) // Dado que el tipo de c es SomeType, las características de SomeType se aplican para determinar su enlace de modelo



Resumen:

1. Los parámetros simples por defecto se pasan a través de parámetros de URL, con excepciones:

1.1 Si la ruta contiene el parámetro id, el parámetro id pasa por la ruta;

1.2 Si el parámetro está marcado como [FromBody], puede ser un parámetro simple, y el cliente puede pasarlo vía POST: $.ajax(url, '=valor'), o $.ajax({url: url, data: {'': 'valor'}});

2. Los parámetros complejos predeterminados (clases de entidad personalizadas) se pasan vía POST, con excepciones:

2.1 Si el valor del parámetro se marca como [FromUri], el parámetro puede ser un parámetro complejo;

3. Un parámetro marcado como [FromBody] solo puede aparecer una vez, un parámetro marcado como [FromUri] puede aparecer varias veces, y si el parámetro marcado como [FromUri] es un parámetro simple, la etiqueta puede eliminarse.




Anterior:.NET Oracle método de consulta multitable, un método absurdo.
Próximo:C# utiliza la reflexión para determinar si se asigna una propiedad
Publicado en 16/8/2016 15:21:29 |
ModelBinder debería tener una clase de característica para ModelBinderAttribute

Similar a los filtros
Publicado en 16/8/2016 15:21:44 |
Ven a visitarnos todos los días
Publicado en 16/8/2016 15:22:00 |
Dame algo de prestigio
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com