我有一个API站点使用Swagger来公开API。dotnet核心版本是2.1,Swagger是Swashbuckle。AspNetCore 3.0.0。我API站点位于反向代理(nginx)后面,nginx URL是https://www.aa.com/chat,Map到后端服务器http://127.0.0.1:5003/,我的Swagger配置是:ConfigureServices:
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");
});
型
然后,我可以输入到ui https://www.aa.com/chat/swagger/index.html,然后ui可以显示所有完美的,但是,当我执行一个API(URI是cus/settings),我发现请求URL https://www.aa.com/cus/settings是错误的,正确的URL是https://www.aa.com/chat/cus/settings.
我如何修复我的swagger配置来解决这个问题?我已经尝试了很多方法,像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,但这些都不能解决我的问题。
3条答案
按热度按时间9wbgstp71#
谢谢大家,我通过下面的配置解决了这个问题:
字符串
qyzbxkaa2#
你可以尝试使用app.js Rewriter重写你的URL。
字符串
请注意,这是未经测试的,只是写出来的我的头。
mum43rcc3#
如果您使用的是OpenAPI v3,则
doc.Host
将不存在。替换为doc.Servers
,如果您的代理设置了所有X-
头并且它们是单值的,则可以像这样初始化(请注意,如果您的网络中有多个代理,则X-*
头是多值的)。字符串
如果您想填充
OpenApiServer
模型类,则可以在这些类上使用更多属性。