c# - 访问 Swashbuckle swagger RootUrl/swagger/docs 不提供任何输出

标签 c# asp.net-web-api2 swagger swashbuckle

我有一个 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 文档输出

Build Properties

4) Swagger UI 将在 swagger/ui/index 提供

enter image description here

关于c# - 访问 Swashbuckle swagger RootUrl/swagger/docs 不提供任何输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34526954/

相关文章:

c# 验证 CRL 列表中的证书

c# - Web Api 2 - 填充复杂查询字符串参数的默认值

c# - 如何在 ASP.NET Web API 核心中全局启用 CORS

c# - 如何从 Azure API 应用程序解决方案生成 swagger 元数据文件?

spring-boot - 在azure上部署后如何查看swagger

documentation - Swagger 单交互 html

c# - 通用 lambda 方法签名

c# - .NET Core 2.0 身份和 jwt?

c# - 监听同一流(TCPClient/SSLStream)上的其他请求?

c# - GraphDiff 也可以用于简单实体的部分更新吗?