ASP.Net Core + Swagger — для действий требуется явная привязка HttpMethod для Swagger 2.0. ⇐ C#
ASP.Net Core + Swagger — для действий требуется явная привязка HttpMethod для Swagger 2.0.
У меня есть проект MyProject.Api со следующей структурой:
Контроллеры/ - Апи/ - UsersController.cs - HomeController.cs Стартап.cs где HomeController.cs выглядит следующим образом:
пространство имен MyProject.Api.Controllers { общедоступный класс HomeController: Контроллер { частный IHostingEnvironment только для чтения _hostingEnvironment; public HomeController(IHostingEnvironment hostingEnv) {...} [HttpGet] public async Task Index() {...} [HttpGet("sitemap.xml")] public IActionResult SiteMap() {...} [HttpGet("ошибка")] общественная ошибка IActionResult() {...} } } и UsersController.cs выглядят следующим образом:
пространство имен MyProject.Api.Controllers.Api { [Маршрут("api/[контроллер]")] общедоступный класс UsersController: Контроллер { частный только для чтения ApiHelper _apiHelper; частный только для чтения IUserService _userService; public UsersController(ILogger logger, IUserService userService) {...} [HttpPost("логин")] public async Task Login([FromBody] запрос LoginRequest) {...} [HttpPost("регистрация")] public async Task Register([FromBody] RegisterRequest request) {...} [HttpGet("обновить")] [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] public async Task Renew() {...} } } и Startup.cs:
пространство имен MyProjet.Api { публичный класс стартапа { частная конфигурация IConfiguration {get; } публичный запуск (конфигурация IConfiguration) {...} общественная недействительность ConfigurationServices (службы IServiceCollection) { ... Services.AddSwaggerGen(c => c.SwaggerDoc("v1", new Info {Title = "Web Api Docs", Version = "v1"})); } public void Настройка (приложение IApplicationBuilder, среда IHostingEnvironment) { ... приложение.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); }); app.MapWhen(x => !x.Request.Path.Value.StartsWith("/swagger", StringComparison.OrdinalIgnoreCase), builder => { builder.UseMvc(маршруты => { маршруты.MapSpaFallbackRoute( «спа-запасной вариант», новый {controller = "Home", action = "Index"}); }); }); } } } когда я загружаю /swagger, пользовательский интерфейс загружается успешно, но со следующей ошибкой:
Ошибка получения Внутренняя ошибка сервера /swagger/v1/swagger.json и с этой ошибкой на стороне сервера
System.NotSupportedException: неоднозначный метод HTTP для действия — WebEssentials.AspNetCore.Pwa.PwaController.ServiceWorkerAsync (WebEssentials.AspNetCore.Pwa). Для действий требуется явная привязка HttpMethod для Swagger 2.0. в Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.CreatePathItem (IEnumerable`1 apiDescriptions, ISchemaRegistry SchemaRegistry) в System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](источник IEnumerable`1, Func`2 keySelector, Func`2 elementSelector, компаратор IEqualityComparer`1) в Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GetSwagger(String documentName, String Host, String basePath, String[] схемы) в Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider) в Microsoft.AspNetCore.SpaServices.Webpack.ConditionalProxyMiddleware.Invoke (контекст HttpContext) в Microsoft.AspNetCore.SpaServices.Webpack.ConditionalProxyMiddleware.Invoke (контекст HttpContext) в Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke (контекст HttpContext) в Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](приложение IHttpApplication`1) но все методы имеют уникальный маршрут, уникальное имя и их HTTP-методы явно связаны. Я попробовал добавить [Route("")] в HomeController.cs, но это тоже не сработало.
Что я делаю не так?
У меня есть проект MyProject.Api со следующей структурой:
Контроллеры/ - Апи/ - UsersController.cs - HomeController.cs Стартап.cs где HomeController.cs выглядит следующим образом:
пространство имен MyProject.Api.Controllers { общедоступный класс HomeController: Контроллер { частный IHostingEnvironment только для чтения _hostingEnvironment; public HomeController(IHostingEnvironment hostingEnv) {...} [HttpGet] public async Task Index() {...} [HttpGet("sitemap.xml")] public IActionResult SiteMap() {...} [HttpGet("ошибка")] общественная ошибка IActionResult() {...} } } и UsersController.cs выглядят следующим образом:
пространство имен MyProject.Api.Controllers.Api { [Маршрут("api/[контроллер]")] общедоступный класс UsersController: Контроллер { частный только для чтения ApiHelper _apiHelper; частный только для чтения IUserService _userService; public UsersController(ILogger logger, IUserService userService) {...} [HttpPost("логин")] public async Task Login([FromBody] запрос LoginRequest) {...} [HttpPost("регистрация")] public async Task Register([FromBody] RegisterRequest request) {...} [HttpGet("обновить")] [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] public async Task Renew() {...} } } и Startup.cs:
пространство имен MyProjet.Api { публичный класс стартапа { частная конфигурация IConfiguration {get; } публичный запуск (конфигурация IConfiguration) {...} общественная недействительность ConfigurationServices (службы IServiceCollection) { ... Services.AddSwaggerGen(c => c.SwaggerDoc("v1", new Info {Title = "Web Api Docs", Version = "v1"})); } public void Настройка (приложение IApplicationBuilder, среда IHostingEnvironment) { ... приложение.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); }); app.MapWhen(x => !x.Request.Path.Value.StartsWith("/swagger", StringComparison.OrdinalIgnoreCase), builder => { builder.UseMvc(маршруты => { маршруты.MapSpaFallbackRoute( «спа-запасной вариант», новый {controller = "Home", action = "Index"}); }); }); } } } когда я загружаю /swagger, пользовательский интерфейс загружается успешно, но со следующей ошибкой:
Ошибка получения Внутренняя ошибка сервера /swagger/v1/swagger.json и с этой ошибкой на стороне сервера
System.NotSupportedException: неоднозначный метод HTTP для действия — WebEssentials.AspNetCore.Pwa.PwaController.ServiceWorkerAsync (WebEssentials.AspNetCore.Pwa). Для действий требуется явная привязка HttpMethod для Swagger 2.0. в Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.CreatePathItem (IEnumerable`1 apiDescriptions, ISchemaRegistry SchemaRegistry) в System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](источник IEnumerable`1, Func`2 keySelector, Func`2 elementSelector, компаратор IEqualityComparer`1) в Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GetSwagger(String documentName, String Host, String basePath, String[] схемы) в Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider) в Microsoft.AspNetCore.SpaServices.Webpack.ConditionalProxyMiddleware.Invoke (контекст HttpContext) в Microsoft.AspNetCore.SpaServices.Webpack.ConditionalProxyMiddleware.Invoke (контекст HttpContext) в Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke (контекст HttpContext) в Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](приложение IHttpApplication`1) но все методы имеют уникальный маршрут, уникальное имя и их HTTP-методы явно связаны. Я попробовал добавить [Route("")] в HomeController.cs, но это тоже не сработало.
Что я делаю не так?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
ASP.Net Core + Swagger — для действий требуется явная привязка HttpMethod для Swagger 2.0.
Anonymous » » в форуме C# - 0 Ответы
- 25 Просмотры
-
Последнее сообщение Anonymous
-
-
-
ASP.Net Core + Swagger — для действий требуется явная привязка HttpMethod для Swagger 2.0.
Anonymous » » в форуме C# - 0 Ответы
- 23 Просмотры
-
Последнее сообщение Anonymous
-