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

问题描述

我有一个.NET lambda API,以前我使用Swashbuckle生成一个swagger.json文件,该文件已提供给外部站点使用。我现在正在尝试进行设置,以便swagger.json文件由API生成,并且可以通过外部网站的网址向我们提供,例如:mylambdaapi.com/swagger/v2/swagger.json。如下所述,我可以通过向模板添加虚拟事件来使此工作正常进行。

static String readFirstLineFromFileWithFinallyBlock(String path)
                                                     throws IOException {
    BufferedReader br = new BufferedReader(new FileReader(path));
    try {
        return br.readLine();
    } finally {
        if (br != null) br.close();
    }
}

这仅用于正常访问文件,但是在尝试加载json时,外部站点将遇到CORS“无'Access-Control-Allow-Origin'标头”问题。在这种情况下,有什么方法可以强制生成使用“ Access-Control-Allow-Origin”?还是这样不可行?我正在研究另一位开发人员先前构建的内容,因此我尝试不重写所有内容,但是我对另一种方法持开放态度,只要它能够生成外部站点可以使用的大量json。

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

解决方法

尝试使用UseCors()功能,但是无效。我能够通过在UseSwagger之前添加匿名函数来处理响应来解决此问题。

以下代码摘自我启动时的“配置”功能。

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

app.UseSwagger();