ASP.Net Core + Swagger — для действий требуется явная привязка HttpMethod для Swagger 2.0.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 ASP.Net Core + Swagger — для действий требуется явная привязка HttpMethod для Swagger 2.0.

Сообщение Anonymous »

У меня есть проект MyProject.Api со следующей структурой:

Код: Выделить всё

Controllers/
- Api/
- UsersController.cs
- HomeController.cs
Startup.cs
где HomeController.cs выглядит следующим образом:

Код: Выделить всё

namespace MyProject.Api.Controllers
{
public class HomeController : Controller
{
private readonly IHostingEnvironment _hostingEnvironment;

public HomeController(IHostingEnvironment hostingEnv) {...}

[HttpGet]
public async Task Index() {...}

[HttpGet("sitemap.xml")]
public IActionResult SiteMap() {...}

[HttpGet("error")]
public IActionResult Error() {...}
}
}
и UsersController.cs выглядят следующим образом:

Код: Выделить всё

namespace MyProject.Api.Controllers.Api
{
[Route("api/[controller]")]
public class UsersController : Controller
{
private readonly ApiHelper _apiHelper;
private readonly IUserService _userService;

public UsersController(ILogger logger, IUserService userService) {...}

[HttpPost("login")]
public async Task Login([FromBody] LoginRequest request) {...}

[HttpPost("register")]
public async Task Register([FromBody] RegisterRequest request) {...}

[HttpGet("renew")]
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public async Task Renew() {...}
}
}
и Startup.cs:

Код: Выделить всё

namespace MyProjet.Api
{
public class Startup
{
private IConfiguration Configuration { get; }

public Startup(IConfiguration configuration) {...}

public void ConfigureServices(IServiceCollection services)
{
...

services.AddSwaggerGen(c => c.SwaggerDoc("v1", new Info {Title = "Web Api Docs", Version = "v1"}));
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...

app.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(routes =>
{
routes.MapSpaFallbackRoute(
"spa-fallback",
new {controller = "Home", action = "Index"});
});
});
}
}
}
когда я загружаю /swagger, пользовательский интерфейс загружается успешно, но со следующей ошибкой:

Код: Выделить всё

Fetch error
Internal Server Error /swagger/v1/swagger.json
и с этой ошибкой на стороне сервера

Код: Выделить всё

System.NotSupportedException: Ambiguous HTTP method for action - WebEssentials.AspNetCore.Pwa.PwaController.ServiceWorkerAsync (WebEssentials.AspNetCore.Pwa). Actions require an explicit HttpMethod binding for Swagger 2.0
at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.CreatePathItem(IEnumerable`1 apiDescriptions, ISchemaRegistry schemaRegistry)
at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GetSwagger(String documentName, String host, String basePath, String[] schemes)
at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
at Microsoft.AspNetCore.SpaServices.Webpack.ConditionalProxyMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.SpaServices.Webpack.ConditionalProxyMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)
но все методы имеют уникальный маршрут, уникальное имя и их методы HTTP явно связаны. Я попробовал добавить [Route("")] в HomeController.cs, но это тоже не сработало.

Что я делаю не так?


Подробнее здесь: https://stackoverflow.com/questions/574 ... g-for-swag
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»