本地调用Azure Function出现CORS报错,原配置失效如何解决?
Azure Function本地CORS配置失效排查方案
报错信息:Access to XMLHttpRequest at 'http://localhost:7071/api/Function1' from origin 'https://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
1. 排查local.settings.json加载异常问题
你清空配置文件后函数仍可正常启动,大概率是该文件未被运行环境正确读取,按以下步骤校验:
- 确认文件存放位置为项目根目录,与
.csproj项目文件同级,不要放在编译生成的bin、obj目录下 - 右键点击文件选择「属性」,确认「复制到输出目录」选项设置为如果较新则复制或始终复制,若设置为「不复制」运行时会直接忽略该文件
- 校验JSON格式合法性,确保没有语法错误,完整参考配置如下:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet" // 根据实际运行时替换为node、python等对应值 }, "Host": { "CORS": "*", "CORSCredentials": false } }
2. 排除启动参数覆盖配置的情况
- 若使用
func start命令启动,确认命令中没有附带--cors参数,该参数会直接覆盖配置文件中的CORS规则 - 若使用Visual Studio启动,打开项目属性->调试面板,确认「应用程序参数」中没有CORS相关的自定义参数
- 手动删除项目根目录下的
bin、obj文件夹,重新编译后再启动函数,清除缓存的旧配置
3. 排查Entity Framework引入后的代码冲突
新增EF代码后触发问题,优先检查请求流程是否被新增代码拦截:
- 确认没有新增自定义中间件、全局请求拦截逻辑提前终止了OPTIONS预检请求,未返回200状态码就结束响应会直接触发预检不通过的报错
- 若你使用的是Azure Function隔离工作者模型(Isolated Worker Model),local.settings.json中的CORS配置默认不生效,需要在
Program.cs中显式配置CORS规则,参考代码:
var host = new HostBuilder() .ConfigureFunctionsWorkerDefaults() .ConfigureServices(services => { services.AddCors(options => { options.AddPolicy("AllowAll", policy => { policy.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); }); }); // 你原有EF相关的服务注册代码保留在这里 }) .Configure(app => { app.UseCors("AllowAll"); }) .Build(); host.Run();
4. 快速验证方案
可直接通过启动参数指定CORS规则快速验证问题根源,运行以下命令启动函数:func start --cors * --cors-credentials false
如果该方式可解决CORS报错,则完全确认是local.settings.json未被正确读取的问题,回到第一步重新校验文件配置即可。
内容的提问来源于stack exchange,提问作者Mohammed
相关产品推荐
相关产品推荐

