MarcosF8
MarcosF8

Reputation: 2008

Not able to run Swagger UI

I have a .NetCore Web API project. And I am trying to use Swagger on it. All the configuration looks good but when I run my project I got an 404 error, page not found.

Here is my code:

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

My web API base url is: http://localhost:88/ So when I try to open this URL I get a 404: http://localhost:88/swagger/ui

I am using NetCore 1.0.1 and In the project.json I have this line to import Swagger: "Swashbuckle.AspNetCore": "1.0.0"

Any help please? thanks

Upvotes: 2

Views: 8390

Answers (2)

Tseng
Tseng

Reputation: 64121

You are entering the wrong URL in the browser. With Swagger 1.0.0 RTM the default url changed from http://localhost:88/swagger/ui to http://localhost:88/swagger

Upvotes: 5

Set
Set

Reputation: 49769

You need to remember that order of middlewares is important: MVC midleware should be the last one, as it tries to process all requests. As you do not have controller's action mapped to /swagger/ui you receive 404 error. Modify Configure method to:

    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();

Moreover, it is better to replace app.UseMvc() with something like the following, so MVC middleware will not try to process any requests related to swagger (requests to URL started with /swagger):

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

Upvotes: 3

Related Questions