我正在开发一个 .NET Core 3.1 Web API 应用程序,我盯着 看了一会儿。
我已经在我的项目中安装了
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 似乎忽略了它。
我在 .Net core 6 中遇到了同样的问题,因为 swagger 显示规范中没有定义操作。因此在启动类的ConfigureServices方法中添加了以下几行,它起作用了!
services.AddControllers().PartManager.ApplicationParts.Add(new AssemblyPart(typeof(ResourcesController).Assembly));
我使用的是.Net 7 和 Swagger 6.5。我需要做的就是在
builder.Services.AddSwaggerGen();
之前添加以下内容
builder.Services.AddControllersWithViews();