为Azure Functions本地主机配置CORS

46

我正在使用Azure Functions CLI工具本地测试Azure Functions应用程序。是否有任何方法可以为本地主机配置CORS设置?


本地实例是否不会公开在 https://learn.microsoft.com/en-us/azure/azure-functions/functions-how-to-use-azure-function-app-settings#manage-cors 中记录的相同设置 UI? - sideshowbarker
不,你只需要托管运行时,而不是门户。 - Mark Heath
我完全不了解这个架构,但你知道跨源/CORS限制仅在浏览器上执行的Web应用程序中被强制执行,对吧?因此,如果这些应用程序执行的运行时环境在浏览器之外,那么我会认为没有任何东西可以阻止它们从进行编程请求所需的任何Web URL。因此,我猜想我对于哪些功能不能正常工作以及你可能遇到的具体错误感到困惑。 - sideshowbarker
是的,我的用例有点不寻常。它从浏览器中运行一些JavaScript测试,自动调用我的API。因此,浏览器正在调用本地主机,但由于CORS而失败。 - Mark Heath
好的,那么本地主机上一定有一些网络服务器的配置文件吧?或者有一些你可以编辑并从中重新构建的源代码吧?或者这只是一个您没有源代码的二进制文件?无论如何,在最简单的层面上,如果您可以访问配置或源代码,使其发送一个 Access-Control-Allow-Origin:* 响应头,则浏览器将允许您的JavaScript测试按预期工作。 (现在也很好奇它实际上运行在本地主机上的是哪个Web服务器... IIS?) - sideshowbarker
它正在运行以下内容:https://github.com/Azure/azure-webjobs-sdk-script/tree/dev/src/WebJobs.Script.WebHost - Mark Heath
4个回答

97
你可以在local.settings.json文件中配置CORS:在本地设置文件中进行。
{
  "Values": {
  },
  "Host": {
    "CORS": "*"
  }
}

只有当您本地运行项目时,local.settings.json 文件中的设置才会被使用。


6
如果您想只允许单个域名,重要的是不要在末尾添加斜杠"/"。因此,http://localhost:4200/ 不起作用,但 http://localhost:4200 可以作为“CORS”的值使用。 - sschoof
请注意,“Host”应放在“Values”的外面。我尝试将其嵌套在内部,但这会导致错误。 - icanfathom
如果您正在传递授权令牌,则还需包括 CORSCredentials: true。例如 "CORS": "https://localhost:3001", "CORSCredentials": true }``` - Shweta patel

39

26
对我来说,将, "Host": {"LocalHttpPort": 7071, "CORS": "*"}添加到local.settings.json中更加简单(这是在已删除的回答中由某人提出的建议)。 - Martin Smith
1
是的,按照上述方法更改local.settings.json对我解决了问题(Windows 8.1,VS Code)。有人知道为什么这必须在local.settings.json中吗?我已经在host.json中设置了相同的设置,但在本地开发时似乎不起作用。 - ebhh2001

5
另一个在Azure Functions上配置CORS的简单方法是使用Azure门户,

1- 转到Azure门户中的Function应用程序设置

enter image description here

2- 单击CORS并添加您的本地主机URL

enter image description here

这样就完成了!希望对某些人有所帮助。


3
这个问题是针对本地开发的,而不是 Azure 上的问题。 - Miguel Angel
3
有没有一种方法可以在代码中进行配置,而不必通过 Azure Web 门户执行此操作? - Philip Claren
这似乎不安全。你告诉云接受来自任何计算机的本地主机。希望你还有其他安全措施来防止这种情况发生。相反,你应该只允许在本地机器上进行这样的操作。 - Dirk R

2
如果您在通过Visual Studio的Debug的“应用程序参数”传递参数时遇到问题。以下是如何从命令行传递参数的方法:
1)打开普通命令提示符。
2)cd到解决方案编译后的dll,即“您的解决方案路径”\bin\Debug\netstandard2.0
3)从命令行启动Azure函数运行时,例如:
dotnet "C:\Users\USER\AppData\Local\Azure.Functions.V2.Cli\func.dll" host start --port 7071 --cors * --pause-on-error 

4) 在 Visual Studio 中进行调试,选择“调试”->“附加到进程”,然后附加到正在运行的 donet.exe。

希望这能帮助避免某人过多地头痛……


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接