我有一个 web api 2 项目。它被配置为使用 owin 自托管。它没有任何 global.asax 文件。我需要为 web api 提供帮助页面,并为此使用了 swaschbuckle。但是 rooturl/swagger/docs 没有给出任何输出。
我已按照此处的说明进行操作' https://github.com/domaindrivendev/Swashbuckle/issues/196 ',但它仍然无法正常工作。下面是我的配置代码
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;
}
}
代码如有错误请指出
最佳答案
步骤应该如下:
1) 添加“Swashbuckle.Core”作为 NuGet 依赖项(OWIN 只需要核心包)
包.json
<packages>
<package id="Swashbuckle.Core" version="5.5.3" targetFramework="net462" />
...
</packages>
2) 在你的启动类中注册 swagger
启动.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) 在构建属性中启用 XML 文档输出
4) Swagger UI 将在 swagger/ui/index 提供
关于c# - 访问 Swashbuckle swagger RootUrl/swagger/docs 不提供任何输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34526954/