我的Swagger文档没有正确生成,我有基本信息(标题、名称、许可证等),但我的路线上没有文档。
下面是Startup.cs中的设置:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<APIContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddControllersWithViews();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Version = "v1",
Title = "OpenWeb Challenge",
Description = "A 'simple' example ASP.NET Core Web API",
TermsOfService = new Uri("https://example.com/terms"),
Contact = new OpenApiContact
{
Name = "Anthony Da Silva Ferreira",
Email = string.Empty,
Url = new Uri("https://twitter.com/spboyer"),
}
});
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
c.IncludeXmlComments(xmlPath);
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "OpenWebChallenge V1");
});
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
以及自夸的内容:
{
"openapi": "3.0.1",
"info": {
"title": "OpenWeb Challenge",
"description": "A 'simple' example ASP.NET Core Web API",
"termsOfService": "https://example.com/terms",
"contact": {
"name": "Anthony Da Silva Ferreira",
"url": "https://twitter.com/spboyer",
"email": ""
},
"license": {
"name": "Licence",
"url": "https://example.com/license"
},
"version": "v1"
},
"paths": { },
"components": { }
}
控制器样本:
public class ContactsController : Controller
{
private readonly APIContext _context;
public ContactsController(APIContext context)
{
_context = context;
}
// GET: Contacts
public async Task<IActionResult> Index()
{
return View(await _context.Contacts.ToListAsync());
}
// GET: Contacts/Details/5
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var contact = await _context.Contacts
.Include(c => c.ContactSkills)
.ThenInclude(cs => cs.Skill)
.AsNoTracking()
.FirstOrDefaultAsync(m => m.Id == id);
if (contact == null)
{
return NotFound();
}
return View(contact);
}
}
我是不是漏掉了什么配置什么的?这是我第一次从头开始创建API。
发布于 2021-01-14 07:34:35
您将PropertyGroup添加到PROJECT_NAME.csproj文件了吗?
<PropertyGroup>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>$(NoWarn);1591</NoWarn>
</PropertyGroup>
没有它,编译器将不会生成文档文件。
编辑
在文档中,它说:“您必须为您想要在Swagger文档中表示的任何控制器使用属性路由”链接。因此,对于您的控制器,它将是:
[Route("api/contacts")]
public class ContactsController : Controller
{
...
// GET: Contacts
[HttpGet("")]
public async Task<IActionResult> Index()
{
...
}
// GET: Contacts/Details/5
[HttpGet("/details/{id?}")]
public async Task<IActionResult> Details([FromRoute] int? id)
{
...
}
}
编辑
我使用了错误的路由模板语法:
[HttpGet("/details/:id?")] -> [HttpGet("/details/{id?}")]
?可选参数
发布于 2021-01-19 22:17:39
从您的代码来看,ContactsController看起来像是一个MVC控制器(它将返回视图),而不是API控制器。
摇摆者(OpenAPI)是一种语言无关的规范,用于描述REST ,而不是MVC控制器.因此,它不会为MVC控制器生成Swagger文档。尝试添加一个API控制器,然后,使用Swagger添加API信息和描述。
有关使用Swagger的详细信息,请检查开始使用Swashbuckle和ASP.NET核心
https://stackoverflow.com/questions/65721666
复制相似问题