#c# #json #openapi #nswag
#c# #json #openapi #nswag
Вопрос:
Я создаю простой веб-api .net5. Затем я получаю Nswag.aspnetcore от великого Рико Сутера и настраиваю его, чтобы заставить мое приложение создать файл swagger.json
В контроллере с каркасом я пишу другое действие PUT, которое ПРИНИМАЕТ параметр ОБЪЕКТА (самое простое, что я могу)
[HttpPost]
public ActionResult simple(WeatherForecast w)
{
return NoContent();
}
Все работает хорошо из коробки. Я могу найти в http://localhost:63630/swagger/v1/swagger.json
файле.
Затем я использую NSwagStudio для получения прокси-сервера клиента C # с интерфейсами.
Со спецификацией OpenAPI я получу симпатичный интерфейс c #:
[System.CodeDom.Compiler.GeneratedCode("NSwag", "13.10.2.0 (NJsonSchema v10.3.4.0 (Newtonsoft.Json v12.0.0.0))")]
public partial interface IWeatherForecastClient
{
/// <exception cref="ApiException">A server side error occurred.</exception>
System.Threading.Tasks.Task<System.Collections.Generic.ICollection<WeatherForecast>> GetAsync();
/// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
/// <exception cref="ApiException">A server side error occurred.</exception>
System.Threading.Tasks.Task<System.Collections.Generic.ICollection<WeatherForecast>> GetAsync(System.Threading.CancellationToken cancellationToken);
/// <exception cref="ApiException">A server side error occurred.</exception>
System.Threading.Tasks.Task<FileResponse> SimpleAsync(WeatherForecast w);
/// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
/// <exception cref="ApiException">A server side error occurred.</exception>
System.Threading.Tasks.Task<FileResponse> SimpleAsync(WeatherForecast w, System.Threading.CancellationToken cancellationToken);
}
Теперь я буду использовать опцию NSwagStudio «Отражение WebAPI», Config:
- Пути сборки .Net => . binDebugnet5.0WebApplication7.dll
- Путь к ссылочным файлам сборки => .bin Debug net5.0
- Проверьте, использует ли сборка ASP.NET Ядро
И интерфейс
[System.CodeDom.Compiler.GeneratedCode("NSwag", "13.10.2.0 (NJsonSchema v10.3.4.0 (Newtonsoft.Json v12.0.0.0))")]
public partial interface IWeatherForecastClient
{
/// <exception cref="ApiException">A server side error occurred.</exception>
System.Threading.Tasks.Task<System.Collections.Generic.ICollection<WeatherForecast>> GetAsync();
/// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
/// <exception cref="ApiException">A server side error occurred.</exception>
System.Threading.Tasks.Task<System.Collections.Generic.ICollection<WeatherForecast>> GetAsync(System.Threading.CancellationToken cancellationToken);
/// <exception cref="ApiException">A server side error occurred.</exception>
System.Threading.Tasks.Task<FileResponse> SimpleAsync(System.DateTimeOffset? date, int? temperatureC, int? temperatureF, string summary);
/// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
/// <exception cref="ApiException">A server side error occurred.</exception>
System.Threading.Tasks.Task<FileResponse> SimpleAsync(System.DateTimeOffset? date, int? temperatureC, int? temperatureF, string summary, System.Threading.CancellationToken cancellationToken);
}
Параметр в методе post был де-сконструирован!!
Вопрос в том, как я мог бы получить с отражением тот же интерфейс, что и с параметром спецификации OpenAPI?
Ответ №1:
Не используйте «отражение WebAPI» с ASP.NET Ядро, как оно есть, только для наследия ASP.NET (неосновной!). Использовать «ASP.NET Ядро через API Explorer», который также более или менее основан на отражении (загружает сборки или .csproj). Я рекомендую использовать .csproj в качестве входных данных вместо DLL… Если в DI не зарегистрирован документ NSwag, вы также можете указать конфигурацию через пользовательский интерфейс.