Web Api 带有 swashbuckle 的文档

Web Api documentation with swashbuckle

我们目前正尝试开始为我们的产品编写 WebApi 服务,从传统的基于 WCF SOAP 的服务切换过来。我们面临的挑战是如何提供 api 文档。我遇到了 SwaggerUi/swash 带扣。 我们的一个限制是我们不想在 IIS 中托管 WebApi 服务,而是在 Windows 服务中托管。我是 Web 新手 Api,所以我做事的方式可能不对。

所以为了测试,我在控制台应用程序中托管网络 api。我可以使用 HttpClient 在 Web Api 上调用 Get 方法,但是如果我在 Web 浏览器中键入 url,我将无法访问该方法(这对于自托管 Web api?).

所以我安装了 Swashbuckle.core nuget 包并在 Startup class(Owin selfhosted)中包含了以下代码。

 var config = new HttpConfiguration();

        config
            .EnableSwagger(c =>
            {
                c.IncludeXmlComments(GetXmlCommentsPath());
                c.SingleApiVersion("v1", "WebApi");
                c.ResolveConflictingActions(x => x.First());
            })
            .EnableSwaggerUi();

 private static string GetXmlCommentsPath()
    {
        var path = $@"{AppDomain.CurrentDomain.BaseDirectory}\WebApiHost.XML";

        return path;
    }

当我浏览到以下位置时 http://localhost:5000/swagger/ui/index 我在 IE 中得到 "page cannot be displayed"。 chrome 类似。 在 console/windows 服务应用程序中托管 WebApi 以自动获取文档时,是否需要执行任何特殊操作?

(我已经为项目启用了 Xml 文档)

我现在附上了一个测试项目。请按照下面的link:

Test project

此致,

纳斯

您的问题不在于 Swashbuckle,它配置正确。相反,当浏览器导航到 swagger URI 时,您的 OWin Web 应用程序已经关闭。您的 using 语句意味着网络应用程序在它的末尾关闭 - 在 Chrome 打开并导航到 swagger 路径之前。您需要确保网络应用程序仍然是 运行 - 然后您的路径将有效(尽管在您的源代码中您的 url 变量中有不同的端口 9000 和 5000)。