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));

Извините, что беспокою вас, но интересно, решена ли эта проблема? Если она решена, можете ли вы поделиться со мной проблемой?

Кстати, могу ли я услышать другие идеи по этому поводу.

Другие вопросы по тегам