0

i have SwaggerConfig Setup like this

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

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

and WebApiConfig setup like this

    public static class WebApiConfig
{
    /// <summary>
    /// Register Method for Configuration Settings.
    /// </summary>
    /// <returns>Returns a HttpConfiguration which is a complex object which represents a configuration of HttpServer.
    /// </returns>
    public static HttpConfiguration Register()
    {
        var config = new HttpConfiguration();

        // Web API routes
        config.MapHttpAttributeRoutes();
        config.MessageHandlers.Add(new CancelledTaskBugWorkaroundMessageHandler());

        // SetupOData(config);

        // require authentication for all controllers
        config.Filters.Add(new AuthorizeAttribute());
        config.Filters.Add(new HostAuthenticationAttribute("Bearer"));

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        config.Routes.MapHttpRoute(
            name: "GetPagedData",
            routeTemplate: "{controller}/{pageNumber}/{pageSize}"
        );

        // Web API configuration and services
        config.EnableCors();

        // pulling out the XML for now -teg
        config.Formatters.XmlFormatter.SupportedMediaTypes.Clear();

        config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling =
            Newtonsoft.Json.ReferenceLoopHandling.Ignore;

        config.Formatters.JsonFormatter.SupportedMediaTypes.Add(
            new MediaTypeHeaderValue("application/json-patch+json"));
        config.Formatters.JsonFormatter.SupportedMediaTypes.Add(
            new MediaTypeHeaderValue("text/html"));

        var logger = new LoggerConfiguration()
            .ReadFrom.AppSettings()
            .CreateLogger();

        config.Services.Add(typeof(IExceptionLogger), new MedefisExceptionLogger(logger));
        config.Filters.Add(new CommonExceptionFilterAttribute());

        var json = config.Formatters.JsonFormatter;
        json.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
        json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

        config.Services.Replace(typeof(IDocumentationProvider),
             new XmlCommentDocumentationProvider(HttpContext.Current.Server.MapPath("~/App_Data/Medefis.API.XML")));
        return config;
    }
}

in the Startup.cs i am calling SwaggerConfig.Register() and few lines later i am also calling WebApiConfig.Register()

 public class Startup
{
    /// <summary>
    /// Configuration for IAppBuilder on MedefisAPIUri
    /// </summary>
    /// <param name="app"></param>
    public void Configuration(IAppBuilder app)
    {
        var builder = new ContainerBuilder();

        SwaggerConfig.Register();
        var logger = new LoggerConfiguration()
            .ReadFrom.AppSettings()
            .CreateLogger();

        logger.Information("Api Startup");

        AutoMapperConfiguration.Configure();
        //CreateFoldersOnFileSystem();

        app.UseCors(CorsOptions.AllowAll);
        JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>();
        AntiForgeryConfig.UniqueClaimTypeIdentifier = IdentityServer3.Core.Constants.ClaimTypes.Subject;

        if (ConfigurationManager.AppSettings["UseIdentityServer"] == "True")
        {
            app.UseIdentityServerBearerTokenAuthentication(
                new IdentityServerBearerTokenAuthenticationOptions
                {
                    Authority = MedefisConstants.MedefisSTSConfig,
                    RequiredScopes = new[] { MedefisConstants.Scopes.api },
                    ClientId = MedefisConstants.Scopes.api,
                    ClientSecret = MedefisConstants.Secrets.InternalAPIClientSecret
                }
            );
        }

        // https://stackoverflow.com/questions/15637491/how-to-inject-httpcontextbase-using-autofac-in-asp-net-mvc-4
        builder.Register(c => new HttpContextWrapper(HttpContext.Current)).As<HttpContextBase>().InstancePerRequest();
        builder.RegisterType<ContactEmailRepository>().As<IContactEmailRepository>().InstancePerRequest();
        builder.RegisterType<EmailMedefisUsersHelper>().As<IEmailMedefisUsersHelper>().InstancePerRequest();
        builder.RegisterType<AgencyBiddingProfileService>().As<IAgencyBiddingProfileService>().InstancePerRequest();


        builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
        builder.RegisterType<UploadDocumentHelper>().As<IUploadDocumentHelper>().InstancePerRequest();

        builder.RegisterModule(new ValidationModule());

        //Service
        //builder.RegisterType<..... // su registerations goes here

        //Setup
        var config = WebApiConfig.Register();
        builder.RegisterWebApiFilterProvider(config);
        builder.RegisterInstance(config).As<HttpConfiguration>().SingleInstance().PropertiesAutowired();

        var container = builder.Build();
        config.EnableDependencyInjection();
        config.DependencyResolver = new AutofacWebApiDependencyResolver(container);

        app.Use(typeof(WebApiAuthUserMiddleware));
        app.UseAutofacMiddleware(container);
        app.UseAutofacWebApi(config);
        app.UseWebApi(config);

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = "Cookies"
        });

        config.EnsureInitialized();
    }
}

the problem is that when i call http://localhost:xxxx/swagger it redirects to /swagger/ui/index but i get the error

No type was found that matches the controller named 'swagger'

please not the i am using Swashbuckle.Net45 version 5.2.1

Update after prefixing the paths with "api/" in routeTemplate: "api/{controller}/{id}""

i was able to load the UI but none of paths and definitions are empty.

1 Answer 1

1

Solution was not to use SwaggerConfig.Register() separately instead do this configuration inside WebApiConfig.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.