У WebAPI тіло запиту (HttpContent) можна прочитати лише один раз, не кешувати і читати лише вперед.
Наприклад:
1. Адреса запиту: /?id=123&name=bob
Серверний метод: void Action(int id, ім'я рядка) // Всі параметри прості типи, тому всі вони походять з URL
2. Адреса запиту: /?id=123&name=bob
Серверний метод: void Action([FromUri] int id, [FromUri] ім'я рядка) // Те саме, що й вище
ім'я рядка void Action([FromBody]); Атрибут [FormBody] показує, що все тіло читається як рядок у вигляді аргументу
3. Адреса запиту: /?id=123
Визначення класу:
публічний клас Customer { // Визначено складний тип об'єкта public string Name { get; декорація; } public int Age { get; декорація; }
}
Серверний метод: void Action(int id, Customer c) // Ідентифікатор параметра зчитується зі рядка запиту, параметр c — складний клас об'єкта Customer, зчитуваний від тіла до formatter
Метод на стороні сервера: void action (Клієнт c1, Клієнт c2) // Помилка! Множинні параметри є складними типами, і всі вони намагаються читати з тіла, яке можна прочитати лише один раз
Метод на стороні сервера: void action([FromUri] Клієнт c1, Клієнт c2) // Так! На відміну від дії вище, складний тип C1 буде зчитуватися з URL, а C2 — з тіла
4. Метод ModelBinder:
void Action([ModelBinder(MyCustomBinder)] SomeType c) // Вказує, що для розв'язання параметра використовується конкретний зв'язувач моделі
[ModelBinder(MyCustomBinder)] публічний клас SomeType { } // Застосуйте це правило до всіх параметрів типу SomeType, оголосивши атрибут [ModelBidner(MyCustomBinder)] для конкретного типу SomeType
void Action (SomeType c) // Оскільки тип c — SomeType, характеристики SomeType застосовуються для визначення зв'язування моделі
Зведення:
1. Стандартні прості параметри передаються через параметри URL, з винятками:
1.1 Якщо маршрут містить параметр id, параметр id передається через маршрут;
1.2 Якщо параметр позначений як [FromBody], параметр може бути простим параметром, і клієнт може передати його через POST: $.ajax(url, '=value') або $.ajax({url: url, data: {'': 'value'}});
2. Стандартні комплексні параметри (класи власних сутностей) передаються через POST, з винятками:
2.1 Якщо значення параметра позначено як [FromUri], параметр може бути комплексним параметром;
3. Параметр з позначкою [FromBody] може з'являтися лише один раз, параметр, позначений як [FromUri], може з'являтися кілька разів, і якщо параметр, позначений як [FromUri], є простим параметром, тег можна видалити. |