首页 文章

如何在swagger中为.Net Core Web API设置基本路径属性

提问于
浏览
4

我在ASP.Net Core(版本1.1.2)中构建了一个Web API,并使用Swashbuckle.AspNetCore生成swagger定义 .

下面是自动生成的swagger定义的一部分 . 我想更改路径,所以它不包括 /api/ApiName 但它将包含在 basePath 现在 /

{
    "swagger": "2.0",
    "info": {
        "version": "v1",
        "title": "ApiName.V1"
    },
    "host": "ApiUrl",
    "basePath": "/api/ApiName",
    "paths": {
        "/": {
            "get": {
                "tags": [
                    "ApiName"
                ],
                .........

所以我想得到的是:

{
    "swagger": "2.0",
    "info": {
        "version": "v1",
        "title": "ApiName.V1"
    },
    "host": "ApiUrl",
    "basePath": "/",
    "paths": {
        "/api/ApiName": {
            "get": {
                "tags": [
                    "ApiName"
                ],
                .........

我们有一些其他的API没有用.Net Core编写,并且它通过添加默认路由修复了同样的问题 . 我试图通过删除API控制器顶部的路由在.Net核心上做同样的事情

[Route("api/[Controller]")]

并将其添加到Startup.cs . 但是这没用 . 有没有人知道如何解决这个问题?

2 回答

  • 8

    最后我用它来修复它:

    您可以设置PreSerializeFilters以添加BasePath并编辑路径 . 以为会有更优雅的方式,但这有效 .

    var basepath = "/api/AppStatus";
                c.PreSerializeFilters.Add((swaggerDoc, httpReq) => swaggerDoc.BasePath = basepath);
    
    
                c.PreSerializeFilters.Add((swaggerDoc, httpReq) => {
                    IDictionary<string, PathItem> paths = new Dictionary<string, PathItem>();
                    foreach (var path in swaggerDoc.Paths)
                    {
                        paths.Add(path.Key.Replace(basepath, "/"), path.Value);
                    }
                    swaggerDoc.Paths = paths;
                });
    
  • 1

    使用 IDocumentFilter 可以修改结果swagger定义 .
    我在这里有一些例子:

    https://github.com/heldersepu/SwashbuckleTest/blob/master/Swagger_Test/App_Start/SwaggerConfig.cs#L285

相关问题