在 .NET Lambda API 中为 Swashbuckle swagger.json 启用 COR

问题描述 投票:0回答:2

我有一个 .NET lambda API,之前我使用 Swashbuckle 生成一个 swagger.json 文件,该文件提供给外部站点使用。我现在正在尝试进行设置,以便 swagger.json 文件由 API 生成,并通过外部站点的 url 提供给我们,即:mylambdaapi.com/swagger/v2/swagger.json。当推送到 aws 时,我可以通过向我的模板添加一个虚拟事件来实现此功能,如下所示。

"SwaggerJson": {
  "Type": "Api",
  "Properties": {
    "Path": "/swagger/v2/swagger.json",
    "Method": "GET"
  }
}

这适用于正常访问文件,但是在尝试加载 json 时,外部站点将遇到 CORS“No 'Access-Control-Allow-Origin' header”问题。在这种情况下,有什么方法可以强制生成使用“Access-Control-Allow-Origin”吗?或者说这种方式不可行?我正在研究另一个开发人员之前构建的内容,因此我尝试不重写每个内容,但是我愿意接受另一种方法,只要它能够生成一些外部站点可以使用的 swagger json。

编辑:我应该注意,我正在使用 API 网关,将鼠标悬停在 swagger.json 上仅用于外部站点的文档目的。

asp.net aws-lambda cors swagger swashbuckle.aspnetcore
2个回答
3
投票

尝试使用 UseCors() 功能,但没有成功。我可以通过在 UseSwagger 之前添加一个匿名函数来处理响应来解决这个问题。

以下片段来自我的启动中的配置功能。

app.Use((context, next) =>
{
    context.Response.Headers["Access-Control-Allow-Origin"] = "*";
    return next.Invoke();
});

app.UseSwagger();

0
投票

我最近遇到了这个问题,因为 swagger.json 的 GET 请求没有生成 CORS 选项请求。

当没有 OPTIONS 请求时,asp.net core CORS 功能未触发,导致浏览器出现 CORS 错误。

为了解决这个问题,我必须使用自定义中间件:

            app.Use((context, next) =>
                    {
                        if (context.Request.Path.StartsWithSegments("/api/docs/swagger"))
                        {
                            context.Response.Headers["Access-Control-Allow-Origin"] = "*";
                        }

                        return next.Invoke();
                    });

            app.UseSwagger(c => { c.RouteTemplate = "api/docs/swagger/{documentName}/swagger.json"; });

它与 DoubleHolo 发布的内容类似,但我添加了 if 语句,因为我不希望可以从任何 URL 访问我的整个 API。

© www.soinside.com 2019 - 2024. All rights reserved.