Особенность Swagger в том, что он использует сигнатуры вашего метода для генерации документации о том, как работает ваш код.Обход всех нормальных веб-API и выбор чтения необработанного HTTP-запроса означает, что Swagger не может видеть, что вы делаете, что затрудняет автоматическое определение того, что делает ваш код.Техника, которую вы используете для чтения необработанного запроса и использования динамического, имеет ряд других недостатков.
- Вы не получаете Intellisense для ваших объектов
- Это не такфункциональный означает, что сложнее определить, взглянув на метод, что он принимает за ввод и вывод, что усложняет понимание
- Труднее выполнить модульное тестирование вашего кода, потому что теперь вам нужно создатьHTTP-запрос для вашего контроллера Web API
- Требуется больше кода, чем для работы с правильными объектами
Вместо этого мы должны определить подходящую модель для публикации в нашем API.Это позволит веб-API выполнять свою работу, механизм связывания будет обрабатывать преобразование запроса в экземпляр CreateAccountRequest.
public class CreateAccountRequest
{
public string Email { get; set; }
public string Name { get; set; }
public string Domain { get; set; }
}
Тогда мы можем заставить наш метод действия принять этот экземпляр этого класса в качестве параметра..
[HttpPost]
[ActionName("create-account")]
public IHttpActionResult CreateAccount(CreateAccountRequest request)
{
//now here you can validate the request if you want
}
Swagger должен быть в состоянии понять этот метод сейчас, позволяя NSwag сгенерировать полезного клиента.
Обратите внимание, что вместо выполнения пользовательской проверки C # вы должны заглянуть во встроенныйинструменты, предоставляемые веб-API для проверки модели .Тогда все, что вам нужно сделать, это проверить ModelState, а не проверять вручную каждый параметр.Другие инструменты также могут посмотреть на атрибуты ваших моделей, улучшая их работу.