[英]Swagger Page is 404 Not Found in MVC net-core
我有一个全新的 .NET-Core Web API 项目,我想使用 API 版本控制和 swagger。
当我尝试查看 swagger 页面时,我得到了 404。但是,模板附带的默认 ValuesController 有效。
这是我的设置:
启动.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
// Add API Versioning
services.AddApiVersioning(
options =>
{
options.DefaultApiVersion = new ApiVersion(1, 0);
options.AssumeDefaultVersionWhenUnspecified = true;
options.ReportApiVersions = true;
});
// Add Swagger
string pathToDoc = "RegistriesApi.xml";
services.AddSwaggerGen(options =>
{
options.SwaggerDoc("v1",
new Info
{
Title = "Registries API",
Version = "v1",
Description = "A simple api to interact with AMA registries information",
TermsOfService = "None"
});
string filePath = Path.Combine(PlatformServices.Default.Application.ApplicationBasePath, pathToDoc);
options.IncludeXmlComments(filePath);
options.DescribeAllEnumsAsStrings();
});
}
...
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// Url Path Rewriter
RewriteOptions rewriteOptions = new RewriteOptions();
if (!env.IsDevelopment())
{
rewriteOptions.AddRedirectToHttps();
}
else
{
app.UseDeveloperExceptionPage();
}
app.UseRewriter(rewriteOptions);
// Use MVC
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
// Swagger
app.UseSwagger(c =>
{
c.PreSerializeFilters.Add((swagger, httpReq) => swagger.Host = httpReq.Host.Value);
});
app.UseSwaggerUI(
c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "V1 Docs"); });
}
值控制器.cs
[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/values")]
public class ValuesController : Controller
{
// GET api/values
[HttpGet]
public IEnumerable<string> Get()
{
return new[] {"value1", "value2"};
}
// GET api/values/5
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
// POST api/values
[HttpPost]
public void Post([FromBody] string value)
{
}
// PUT api/values/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
}
// DELETE api/values/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
另外,这是我安装的所有库的版本:
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.8" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="2.2.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="2.4.0" />
</ItemGroup>
有没有人看到我可能做错了什么?
当我创建项目时,我不小心在签入中包含了 .vs 文件夹。当我从源代码管理中删除它时,无论出于何种原因,swagger 再次开始工作。
不确定解释是否是针对此的。
对我来说,@Tyler Findlay 解决方案没有奏效。 但是我以一种对我来说很好用的不同方式做到了。
希望这会帮助某人。
更新:URL 可以是 HTTP://localhost:/swagger/ui
我刚刚删除了解决方案根目录中的.vs
文件夹。 现在它起作用了...
您可以通过添加以下代码“c.RoutePrefix = string.Empty;”来解决这个问题在 app.UseSwaggerUI 中
以上答案的组合对我有用:
app.UseSwaggerUI(c => {
c.RoutePrefix = string.Empty;
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Name of Your API v1");
});
以防万一,检查 Startup.cs 中的 Configure() 方法,如果它们不存在,则应添加这些行:
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Name of Your API v1"));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.