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

时间:2017-10-12 21:10:18

标签: asp.net-core swagger swagger-ui swashbuckle

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

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

但是他们不能在一起玩得很开心。因为SwaggerUI只是将返回的HTML显示为文本。

对于GET请求,这不是一个大问题,因为我只是将网址粘贴到浏览器中。但对于没有效果的POST。 所以我想知道当Content-Type标题为text/html时是否有办法让SwaggerUI渲染html。我一直无法找到与此相关的任何内容,这有点令人费解:)

1 个答案:

答案 0 :(得分:3)

来自swagger devs:

  

我们必须清理HTML以避免注入标记并启用XSS   漏洞。所以,是的,原始的html是你应该期待看到的。

但是,您可以自行更改为swagger-ui.js

--- 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);

代码由nicksellen在https://github.com/swagger-api/swagger-ui/issues/1748

提供

使用Swashbuckle集成此更改:

  1. GitHub
  2. 下载Swashbuckle
  3. swagger-ui.js位于bower_components \ swagger-ui \ dist文件夹中的Swashbuckle.AspNetCore.SwaggerUI项目中。进行上述编辑并编译。
  4. 在您的项目中,删除Swashbuckle NuGet包并添加对步骤2中创建的DLL的引用。
  5. 由于NuGet不再管理此软件包,因此您可以定期检查Swashbuckle项目并在需要更新时重复此过程。