Swagger возвращает "Никакие операции не определены в спецификации!"
Я разрабатываю приложение веб-API.NET Core 3.1 и какое-то время смотрю на этот экран.
Я установил Swashbuckle.AspNetCore -Version 5.5.0
в моем проекте, и я сделал следующие конфигурации:
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options =>
{
options.Filters.Add(typeof(DomainExceptionFilter));
options.ModelBinderProviders.Insert(0, new ProviderModelBinder());
});
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Version = "v1",
Title = "Sample .NET Core DDD",
Description = "A .NET Core sample project based on DDD principles",
License = new OpenApiLicense
{
Name = "MIT License",
Url = new Uri("https://opensource.org/licenses/MIT")
}
});
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
c.IncludeXmlComments(xmlPath);
});
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Sample API v1");
c.RoutePrefix = string.Empty;
});
app.UseRouting();
app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
}
У меня есть еще кое-что в этих методах, но я добавил сюда только то, что считаю необходимым для решения этой проблемы.
И мой контроллер такой:
UserController.cs
namespace Sample.Application.Controllers
{
[Route("Api/[controller]")]
[ApiController]
public class UserController : ControllerBase<User, UserEditViewModel, UserListViewModel>
{
private readonly IUserService _userService;
public UserController(IUserService service, IMapper mapper) : base(service, mapper)
{
_userService = service;
}
/// <summary>
/// Login the user in the system
/// </summary>
/// <param name="loginViewModel">Login information</param>
/// <returns>Token</returns>
[HttpPost("Login")]
[AllowAnonymous]
[ProducesResponseType(typeof(UserTokenViewModel), 200)]
public IActionResult Authenticate([FromBody]UserLoginViewModel loginViewModel)
{
// Do something
}
}
}
Я тоже пробовал использовать этот синтаксис:
[HttpGet]
[Route("Login")]
[AllowAnonymous]
[ProducesResponseType(typeof(UserTokenViewModel), 200)]
public IActionResult Authenticate([FromBody]UserLoginViewModel loginViewModel)
{
// Do something
}
И у меня есть другие методы, унаследованные от базового контроллера.
Что я сделал не так? Кто-нибудь сталкивался с такой же проблемой? Я просмотрел файлы сборки, и создается XML со всей информацией, но чванство, похоже, игнорирует его.
2 ответа
Я столкнулся с той же проблемой в .Net core 6, что и чванство, показывающее, что в спецификации нет операций, определенных. Поэтому добавленные ниже строки внутри метода ConfigureServices в классе запуска, и это сработало!
services.AddControllers().PartManager.ApplicationParts.Add(new AssemblyPart(typeof(ResourcesController).Assembly));
Извините, что беспокою вас, но интересно, решена ли эта проблема? Если она решена, можете ли вы поделиться со мной проблемой?
Кстати, могу ли я услышать другие идеи по этому поводу.