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. |