I have a web api 2 project. It is configured to be self hosted using owin. It doesnt have any global.asax file. I need to have help pages for the web api, and have used swaschbuckle for it. But rooturl/swagger/docs is not giving any output.
I have followed the instructions here 'https://github.com/domaindrivendev/Swashbuckle/issues/196', but it is still not working. Below is my configuration code
public void Configuration(IAppBuilder app)
{
// Configure DI
container = BuildDI();
// Create the configuration. OWIN Should create a new httpconfiguration.
// GlobalConfiguration can't be used.
HttpConfiguration = new HttpConfiguration();
HttpConfiguration.Formatters.XmlFormatter.UseXmlSerializer = true;
HttpConfiguration.MapHttpAttributeRoutes();
HttpConfiguration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
// Set ServicePointManager properties.
ServicePointManager.ServerCertificateValidationCallback = ((sender, cert, chain, sslPolicyErrors) => true);
// 10 concurrent connections can be made on the service point.
ServicePointManager.DefaultConnectionLimit = 10;
// After the idle time expires, the ServicePoint object is eligible for
// garbage collection and cannot be used by the ServicePointManager object.
ServicePointManager.MaxServicePointIdleTime = 30000; // 30 Seconds.
app.UseSerilogRequestContext("RequestId");
// Middleware is injected form DI.
app.UseAutofacMiddleware(container);
app.UseAutofacWebApi(HttpConfiguration);
//Enable swashbuckle
SwaggerConfig.Register(HttpConfiguration);
// Webapi middleware. Do it at the end.
app.UseWebApi(HttpConfiguration);
// Register callback to dispose container.
RegisterShutdownCallback(app, container);
}
public class SwaggerConfig
{
public static void Register(HttpConfiguration config)
{
config.EnableSwagger(c =>
{
c.RootUrl(rurl => ConfigurationManager.AppSettings["hostUrl"].ToString());
c.IncludeXmlComments(GetXmlCommentsFileLocation());
c.SingleApiVersion("v1", "Isone");
})
.EnableSwaggerUi(c =>
{
});
}
private static string GetXmlCommentsFileLocation()
{
var baseDirectory = AppDomain.CurrentDomain.BaseDirectory + "\\bin";
var commentsFileName = Assembly.GetExecutingAssembly().GetName().Name + ".XML";
var commentsFileLocation = Path.Combine(baseDirectory, commentsFileName);
return commentsFileLocation;
}
}
Please point out the mistake if any in the code.
The steps should be as follows:
1) Add "Swashbuckle.Core" as a NuGet dependency (only the core package is required with OWIN)
package.json
<packages>
<package id="Swashbuckle.Core" version="5.5.3" targetFramework="net462" />
...
</packages>
2) Within you startup class register swagger
Startup.cs
public partial class Startup
{
/// <summary>
/// Used to create an instance of the Web application
/// </summary>
/// <param name="app">Parameter supplied by OWIN implementation which our configuration is connected to</param>
public void Configuration(IAppBuilder app)
{
// Wire-in the authentication middleware
ConfigureAuth(app);
// In OWIN you create your own HttpConfiguration rather than re-using the GlobalConfiguration.
HttpConfiguration config = new HttpConfiguration();
// Handle registration of Swagger API docs
SwaggerConfig.Register(config);
// Handles registration of the Web API's routes
WebApiConfig.Register(config);
// Register web api
app.UseWebApi(config);
}
SwaggerConfig.cs
public class SwaggerConfig
{
public static void Register(HttpConfiguration config)
{
config
.EnableSwagger(c =>
{
c.IncludeXmlComments(GetXmlCommentsPath());
})
.EnableSwaggerUi(c =>
{
c.EnableApiKeySupport("Authorization", "header");
});
}
private static string GetXmlCommentsPath()
{
return $@"{AppDomain.CurrentDomain.BaseDirectory}\bin\Example.XML";
}
}
3) Enable XML documentation output in your build properties
4) Swagger UI will be served at swagger/ui/index
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With