Я пытался понять это уже неделю. Пришло время спросить у С.О.
У меня здесь 4 цели:
- Код контроллера должен использовать входные данные запроса ViewModel для проверки. (фрагмент кода контроллера)
- Код клиента для моего API должен использовать красивый синтаксис модели. (Фрагмент кода клиента)
- Для страницы пользовательского интерфейса swagger я хотел бы, чтобы интерфейс "Try me" был пригоден для использования. Либо набор текстовых полей, либо текстовая область для BLOB-объекта json для сериализации и отправки.
- GET запрос
Фрагмент кода клиента:
var response = client.GetUserProductHistory(new Models.UserProductHistoryRequest() {
Locale = "en-US",
UserPuid = "FooBar"
});
Фрагмент контроллера
[HttpGet]
[HasPermission(Permissions.CanViewUserProductHistory)]
public JsonPayload<UserProductHistoryResponse> GetUserProductHistory([FromUri]UserProductHistoryRequest model)
{
JsonPayload<UserProductHistoryResponse> output = new JsonPayload<UserProductHistoryResponse>();
return output;
}
Я пытался использовать [FromBody]. Это выглядит великолепно, но я получаю сообщение об ошибке «GET-запросы не поддерживают FromBody».
Я попытался использовать [FromUri], но затем сгенерированный клиент дает мне примерно 15 параметров метода на вызов в сгенерированном клиенте.
Я попытался использовать [FromUri] и операционные фильтры, чтобы параметры были сжаты в параметры Ref (сложные объекты, как определено в спецификации). Это на самом деле работало прилично для поколения клиента и стороны сервера Проблема в том, что интерфейс для чванства выглядит действительно неубедительным. Один текстовый блок, который вы не можете использовать очень хорошо. Если я смогу выяснить, как заставить пользовательский интерфейс Swagger изменить внешний вид запроса [FromUri], чтобы он более точно соответствовал пользовательскому интерфейсу [FromBody], я буду в хорошей форме. Любые идеи или уже существующий контент, который укажет мне правильное направление здесь?