Swagger可以呈现app.UseDeveloperExceptionPage()的内容吗?

Snæ*_*ørn 5 swagger swagger-ui swashbuckle asp.net-core

我有一个ASP.NET Core 2.0 Web API,通过Swashbuckle在其中添加了Swagger。很好

我还在app.UseDeveloperExceptionPage()ASP.NET Core中启用了该选项。很好

但是他们在一起玩的不好。因为SwaggerUI只是将返回的HTML显示为文本。

对于GET请求,这不是一个大问题,因为我只是将URL粘贴到浏览器中。但是对于POST不起作用。所以我想知道是否有一种方法可以使SwaggerUI在Content-Type标头为时呈现html text/html。我一直找不到与此相关的任何东西,这有点令人困惑:)

Ali*_*ogy 4

来自 swagger 开发人员:

我们必须清理 HTML 以避免注入标签和启用 XSS 漏洞。所以,是的,原始 html 就是您应该看到的内容。

但是,您可以自行更改 swagger-ui.js(代码由 @nicksellen 提供):

--- swagger-ui.js 2015-09-19 20:58:10.000000000 +0200
+++ swagger-ui.js 2015-11-16 13:45:26.958266568 +0100
@@ -31855,9 +31855,10 @@

     // HTML
     } else if (contentType === 'text/html') {
-      code = $('<code />').html(_.escape(content));
-      pre = $('<pre class="xml" />').append(code);
-
+      var iframe = document.createElement('iframe');
+      iframe.srcdoc = content;
+      iframe.style = 'width: 100%; height: 500px;';
+      pre = iframe;
     // Plain Text
     } else if (/text\/plain/.test(contentType)) {
       code = $('<code />').text(content);
Run Code Online (Sandbox Code Playgroud)

要使用 Swashbuckle 集成此更改:

  1. 从GitHub下载 Swashbuckle
  2. swagger-ui.js 位于 Bower_components\swagger-ui\dist 文件夹中的 Swashbuckle.AspNetCore.SwaggerUI 项目中。进行上述编辑并编译。
  3. 在您的项目中,删除 Swashbuckle NuGet 包并添加对步骤 2 中创建的 DLL 的引用。

由于 NuGet 不再管理此包,因此您需要定期检查 Swashbuckle 项目,并在需要更新时重复此过程。