完全替换Swashbuckle UI

时间:2015-07-27 07:50:12

标签: asp.net asp.net-web-api swagger swashbuckle

现在我正在开发一个ASP.Net Web API并使用Swashbuckle作为其文档。 我知道Swashbuckle在内部使用Swagger-UI,我知道我们可以通过注入我们的css或javascript文件来修改布局,甚至可以更改index.html的布局。

我为Swagger-UI https://github.com/jensoleg/swagger-ui找到了一个很好的主题,并尝试实现它,但无法使其有效。特别是当我想注入bootstrap.js时。无论如何,我可以完全改变Swashbuckle Swagger UI实现,这样我就可以使用该回购中的解决方案吗?

4 个答案:

答案 0 :(得分:9)

当然可以 - 分两步完成。

1)在程序集中包含文件Index.html作为嵌入式资源。例如,假设您的web api项目名为“Contosco.Api”,Index.html将位于此项目的“/Content/Index.html”下。

2)用你自己的

覆盖swagger UI主html页面
[assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")]
public class SwaggerConfig 
{
  public static void Register()
  {
    var thisAssembly = typeof(SwaggerConfig).Assembly;
    GlobalConfiguration.Configuration.EnableSwagger(c => {
     // configure swagger
    })
    .EnableSwaggerUi(c => {
      // beware - the Contosco.Api.Content.Index.html has to match your project paths :)
      c.CustomAsset("index", thisAssembly, "Contosco.Api.Content.Index.html");
    });
  }
}

答案 1 :(得分:2)

您只需下载.zip文件夹,解压缩并包含到您的项目中即可。 在SwaggerConfigre.cs中,您不再需要进行配置。 只需将模板放入文件夹Swagger,当您访问{domain}/swagger时,它就会点击index.html。 (不需要更改构建对嵌入式资源的操作,内容很好)

答案 2 :(得分:1)

我可以按照这里的简单步骤https://swagger.io/docs/swagger-tools/#swagger-ui-documentation-29

使用最新的swagger-ui
  1. 从GitHub下载swagger-ui
  2. 提取并复制dist(将文件夹重命名为swagger)文件夹并将其包含在项目中
  3. 修改dist文件夹中的index.html以指向您的swagger文档路径(当然由Swashbuckle生成)

答案 3 :(得分:0)

对于.NET Core项目,解决方案与@OndrejSvejdar的(正确)答案有些不同:

在将index.html添加为嵌入式资源之后,您必须在Startup.cs中将以下行添加到 public void Configure(IApplicationBuilder app, IHostingEnvironment env) { //... app.UseSwaggerUI(c => { c.IndexStream = () => GetType().GetTypeInfo().Assembly.GetManifestResourceStream("Your.Default.Namespace.Subfolder.Swagger_Custom_index.html"); }); //... } ...

   @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Retrieve the map and initial extent from XML layout
    mMapView = (MapView) findViewById(R.id.map);
    // Enable map to wrap around date line.
    mMapView.enableWrapAround(true);

    String rasterPath = Environment.getExternalStorageDirectory().getPath() + "/raster/test.tif";
    FileRasterSource rasterSource;
    try {
        rasterSource = new FileRasterSource(rasterPath);
    }catch (IllegalArgumentException ie) {
        Log.d(TAG, "null or empty path");
    } catch (FileNotFoundException fe) {
        Log.d(TAG, "raster file doesn't exist");
    } catch (RuntimeException re) {
        Log.d(TAG, "raster file can't be opened");
    }
    RasterLayer rasterLayer = new RasterLayer(rasterSource);
    mMapView.addLayer(rasterLayer);

该过程的所有详细信息都可以在这里找到:https://stackoverflow.com/a/51043251/430742