我有一个.NetCore Web API项目。而我正在尝试使用Swagger。 所有配置看起来都不错,但是当我运行我的项目时,我收到了404错误,找不到页面。
这是我的代码:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton(_config);
services.AddTransient<IRestHelper, RestHelper>();
// Add framework services.
services.AddApplicationInsightsTelemetry(_config);
services.AddMvc();
services.AddSwaggerGen(config =>
{
config.SwaggerDoc("v1", new Info { Title = "Slack Relay API", Version = "v1" });
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(_config.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseApplicationInsightsRequestTelemetry();
app.UseApplicationInsightsExceptionTelemetry();
app.UseMvc();
app.UseSwagger(c =>
{
c.PreSerializeFilters.Add((swagger, httpReq) => swagger.Host = httpReq.Host.Value);
});
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "V1 Docs");
});
}
我的网址API基本网址为:http://localhost:88/ 因此,当我尝试打开此网址时,我会收到404:http://localhost:88/swagger/ui
我正在使用NetCore 1.0.1并且在project.json中我有这行来导入Swagger: &#34; Swashbuckle.AspNetCore&#34;:&#34; 1.0.0&#34;
请帮忙吗? 感谢
答案 0 :(得分:3)
您在浏览器中输入了错误的网址。使用Swagger 1.0.0 RTM,默认网址从http://localhost:88/swagger/ui更改为http://localhost:88/swagger
答案 1 :(得分:2)
你需要记住中间件的顺序很重要:MVC midleware应该是最后一个,因为它试图处理所有请求。由于您没有将控制器的操作映射到/swagger/ui
,因此您收到404错误。将Configure
方法修改为:
app.UseSwagger(c =>
{
c.PreSerializeFilters.Add((swagger, httpReq) => swagger.Host = httpReq.Host.Value);
});
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "V1 Docs");
});
app.UseMvc();
此外,最好用以下内容替换app.UseMvc(),因此MVC中间件不会尝试处理与swagger相关的任何请求(以/swagger
开头的URL请求):
app.MapWhen(x => !x.Request.Path.Value.StartsWith("/swagger"), builder =>
{
builder.UseMvc();
});