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

我在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","basePath": "/","paths": {
        "/api/ApiName": {
            "get": {
                "tags": [
                    "ApiName"
                ],.........

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

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

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

解决方法

最后我用它来修复它:

您可以设置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;
            });

相关文章

本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从...
基于 .NET 的一个全新的、好用的 PHP SDK + Runtime: Pe...
.NET 异步工作原理介绍。
引子 .NET 6 开始初步引入 PGO。PGO 即 Profile Guided Opti...
前言 2021/4/8 .NET 6 Preview 3 发布,这个版本的改进大多来...
前言 开头防杠:.NET 的基础库、语言、运行时团队从来都是相...