0

我有一个.NetCore Web API项目。我正在尝试使用Swagger。 所有的配置看起来不错,但是当我运行我的项目时,我得到一个404错误,页面未找到。无法运行Swagger UI

这里是我的代码:

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"); 
     }); 
    } 

我的Web API基本网址为:http://localhost:88/ 所以,当我试图打开这个网址我得到一个404:http://localhost:88/swagger/ui

我使用磊1.0.1并在project.json我有这条线来导入Swagger: “Swashbuckle.AspNetCore”:“1.0.0”

任何帮助吗? 谢谢

回答

1

您需要记住中间件的顺序很重要: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中间件不会尝试处理与招摇(请求的任何请求到URL开始/swagger ):

app.MapWhen(x => !x.Request.Path.Value.StartsWith("/swagger"), builder => 
{ 
    builder.UseMvc(); 
}); 
+0

谢谢。这是一场引爆,我刚刚做了你提到的改变,但它仍然不起作用。该网址显示了Swagger http:// localhost:88/swagger/v1/swagger.json的json。所以得到json意味着配置完成了吗?但我仍然有这个URL http:// localhost:88/swagger/ui的404。任何想法? – MarcosF8

+0

我得到了我的东西,感谢你和其他回复。我想提出两个正确的回答,但看起来不可能。非常感谢 ! – MarcosF8