Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 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] име на низ) // Същото като по-горе

                      void Action ([FromBody] име на низ); Атрибутът [FormBody] показва, че цялото тяло се чете като низ като аргумент

3. Адрес за заявка: /?id=123

    Определение на класа:

публичен клас Customer { // Дефиниран сложен тип обект
  public string Name { get; декорация; }
  public int Age { get; декорация; }
}

    Метод от страна на сървъра: void Action(int id, Customer c) // Parameter id се чете от низа за заявки, параметър c е сложен клас обект Customer, четен от тялото до formatter

    Метод от страна на сървъра: void action (Клиент c1, Клиент c2) // Грешка! Множество параметри са сложни типове и всички се опитват да четат от тяло, което може да се прочете само веднъж

    Метод от страна на сървъра: void action([FromUri] Клиент c1, Клиент c2) // Да! За разлика от горното действие, комплексният тип C1 ще се чете от URL адреса, а C2 – от тялото

4.ModelBinder метод:

void Action([ModelBinder(MyCustomBinder)] SomeType c) // Показва, че конкретен моделен binder се използва за разрешаване на параметъра

[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, '=стойност'), или $.ajax({url: url, данни: {'': 'value'}});

2. Стандартните комплексни параметри (класове на персонализирани обекти) се предават чрез POST, с изключения:

2.1 Ако стойността на параметъра е маркирана като [FromUri], параметърът може да бъде комплексен параметър;

3. Параметър, маркиран като [FromBody], може да се появи само веднъж, параметър, маркиран като [FromUri], може да се появява многократно, и ако параметърът, маркиран като [FromUri], е прост параметър, тагът може да бъде премахнат.




Предишен:.NET Oracle multi-table query метод, глупав метод.
Следващ:C# използва отражение, за да определи дали свойство е присвоено
Публикувано в 16.08.2016 г. 15:21:29 ч. |
ModelBinder трябва да има клас feature за ModelBinderAttribute

Подобно на филтрите
Публикувано в 16.08.2016 г. 15:21:44 ч. |
Идвайте и посещавайте всеки ден
Публикувано в 16.08.2016 г. 15:22:00 ч. |
Дай ми малко престиж
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com