无法运行Swagger UI

时间:2017-07-02 13:35:54

标签: asp.net-web-api asp.net-core swagger swagger-ui asp.net-core-webapi

我有一个.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;

请帮忙吗? 感谢

2 个答案:

答案 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();
});