简体   繁体   中英

Swagger UI not showing controllers/routes for ASP.NET API

I'm trying to setup Swagger for my API, I have the interface at http://localhost/myAPI/swagger, but my controllers/routes are not displayed. I'm using .net-framework, not .net-core

Startup:

public class WebApiApplication : HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
    }
}

Route config :

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { id = UrlParameter.Optional }
        );
    }
}

Controller:

[RoutePrefix("v1/controller")]
public class TestController : ApiController
{
    [Route("client")]
    [HttpPut]
    public HttpResponseMessage CreateClient([FromUri] string id)
    {
        return new HttpResponseMessage(HttpStatusCode.OK);
    }

    [Route("portfolio")]
    [HttpPost]
    public IResponseItem<int> CreatePortfolio([FromUri] string id)
    {
        return new ResponseItem<int>
        {
            StatusCode = HttpStatusCode.Created,
            Message = "Portfolio successfully created",
            Item = 12
        };
    }
}

Swagger config :

public class SwaggerConfig
{
    public static void Register()
    {
        var thisAssembly = typeof(SwaggerConfig).Assembly;

        GlobalConfiguration.Configuration
            .EnableSwagger(c =>
                {
                    c.SingleApiVersion("v1", "WebAPI");
                })
            .EnableSwaggerUi(c =>
                {
                });
    }
}

I'm new to this so I'm probably missing something

first of all, it seems you made a mistake in RoutePrefix section. If you mean by defining v1/controller to use the name of your controller dynamically in the path, you should put [] around it like this:

[RoutePrefix("v1/[Controller]")]

and about the registration. you need to remove {} from your code.your code should be like the following:

 GlobalConfiguration.Configuration
            .EnableSwagger(c =>c.SingleApiVersion("v1", "WebAPI"))
            .EnableSwaggerUi();

I recommend to register swagger directly into the Application_Start() section. Your final code should be like this :

public class WebApiApplication : HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configuration
          .EnableSwagger(c => c.SingleApiVersion("v1", "title of your api"))
          .EnableSwaggerUi();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
    }
}

and the address to refer is: http://localhost:yourProgramPort/swagger/docs/v1

I hope it is helpful.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM