【问题标题】:asp.net core swagger RoutePrefixasp.net 核心招摇 RoutePrefix
【发布时间】:2019-03-19 16:51:43
【问题描述】:

我有一个 api 站点使用 swagger 来公开 api。 dotnet core 版本是 2.1,swagger 是 Swashbuckle.AspNetCore 3.0.0。 我的 api 站点位于反向代理 (nginx) 后面,nginx url 是 https://www.aa.com/chat,映射到后端服务器 http://127.0.0.1:5003/ 我的招摇配置是: 配置服务:

services.AddSwaggerGen(c =>
                {
                    c.SwaggerDoc("v1", new Info { Title = "aa.IM.CustomerApi", Version = "v1" });
                    var basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);
                    var controllerXmlPath = Path.Combine(basePath, "aa.IM.CustomerApi.xml");
                    var entityXmlPath = Path.Combine(basePath, "aa.IM.Entity.xml");
                    c.IncludeXmlComments(controllerXmlPath);
                    c.IncludeXmlComments(entityXmlPath);
                    //c.DescribeAllEnumsAsStrings();
                });

配置:

app.UseSwagger(c =>
            {
            });
            app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("v1/swagger.json", "aa.IM.CustomerApi");
            });

然后,我可以进入用户界面https://www.aa.com/chat/swagger/index.html 然后ui可以完美显示,但是,当我执行一个api(uri是cus/settings)时,我发现请求urlhttps://www.aa.com/cus/settings是错误的,正确的url是https://www.aa.com/chat/cus/settings

如何修复我的招摇配置以解决问题? 我尝试了很多方法,比如http://eatcodelive.com/2017/05/19/change-default-swagger-route-in-an-asp-net-core-web-api/How to change base url of Swagger in ASP.NET core 但是这些都不能解决我的问题。

【问题讨论】:

  • 在dotnet framework版本中,可以通过设置RootUrl来配置,但是在dotnet core版本中,只能设置RoutePrefix,我试了一下还是不行。

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


【解决方案1】:

谢谢大家,我通过下面的配置解决了:

            app.UseSwagger(c =>
            {
                c.PreSerializeFilters.Add((doc, requset) =>
                {
                    var root = "https://www.aa.com/chat/";
                    doc.Host = root;
                });
            });

【讨论】:

    【解决方案2】:

    您可以尝试使用 app.UseRewriter 重写您的网址。

    app.UseRewriter(new RewriteOptions()
        .AddRewrite(@"/cus/settings", "Chat$1", skipRemainingRules: true));
    

    请注意,这是未经测试的,只是在我脑海中写出来的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-14
      相关资源
      最近更新 更多