Swagger 返回“规范中没有定义操作!”

问题描述 投票:0回答:2

我正在开发一个 .NET Core 3.1 Web API 应用程序,我盯着 this screen 看了一会儿。

我已经在我的项目中安装了

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,但 swagger 似乎忽略了它。

asp.net-core .net-core swagger swashbuckle swashbuckle.aspnetcore
2个回答
0
投票

我在 .Net core 6 中遇到了同样的问题,因为 swagger 显示规范中没有定义操作。因此在启动类的ConfigureServices方法中添加了以下几行,它起作用了!

services.AddControllers().PartManager.ApplicationParts.Add(new AssemblyPart(typeof(ResourcesController).Assembly));

0
投票

我使用的是.Net 7 和 Swagger 6.5。我需要做的就是在

builder.Services.AddSwaggerGen();

之前添加以下内容
builder.Services.AddControllersWithViews();
© www.soinside.com 2019 - 2024. All rights reserved.