Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 27609|Ответ: 3

[WebAPI] WebAPI не может привязывать несколько параметров (SB и SB1) к содержимому запроса

[Скопировать ссылку]
Опубликовано 16.08.2016 13:52:38 | | | |



В WebAPI тело запроса (HttpContent) можно прочитать только один раз, не кэшировать и читать только вперёд.

Например:

1. Адрес запроса: /?id=123&name=bob

    Серверный метод: void Action(int id, имя строки) // Все параметры — простые типы, поэтому все они будут взяты из url

2. Адрес запроса: /?id=123&name=bob

    Серверный метод: void Action([FromUri] int id, [FromUri] string name) // То же, что и выше

                      имя строки 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], является простым параметром, тег можно удалить.




Предыдущий:.NET метод многотабличного запроса Oracle — глупый метод.
Следующий:C# использует отражение для определения, присваивается ли свойство
Опубликовано 16.08.2016 15:21:29 |
ModelBinder должен иметь класс признаков для ModelBinderAttribute

Похоже на фильтры
Опубликовано 16.08.2016 15:21:44 |
Приходите в гости каждый день
Опубликовано 16.08.2016 15:22:00 |
Дайте мне престиж
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com