微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐