You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 7独立进程Azure Functions本地CORS问题求助

排查.NET 7独立进程Azure Functions本地CORS预检OPTIONS请求404问题

1. 纠正独立进程模式的CORS配置逻辑

独立进程(Isolated Worker)模式的Azure Functions,不能用Program.cs里的常规ASP.NET Core CORS中间件——Functions runtime会接管HTTP请求处理,你之前加的策略完全无效。得用专属配置方式:

  • 打开local.settings.json,把Host节点下的CORS配置改成指定地址(别用*,如果请求带凭证的话*会失效),同时加上凭证支持:
    {
      "IsEncrypted": false,
      "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
      },
      "Host": {
        "CORS": "http://localhost:4200",
        "CORSCredentials": true
      }
    }
    

2. 给函数触发器添加OPTIONS方法支持

浏览器发的预检请求是OPTIONS方法,你的AddMember函数触发器默认只允许POST,必须显式声明支持OPTIONS,否则runtime会直接返回404:

[Function("AddMember")]
public async Task<HttpResponseData> Run(
    [HttpTrigger(AuthorizationLevel.Function, "post", "options", Route = "members")] HttpRequestData req)
{
    // 如果是OPTIONS请求,直接返回成功响应
    if(req.Method == "OPTIONS")
    {
        var response = req.CreateResponse(HttpStatusCode.OK);
        return response;
    }
    // 原有POST逻辑
}

同时确认函数路由Route = "members"和请求路径/api/members完全匹配,别拼写错。

3. 重启本地Functions运行时

修改local.settings.json后,必须停止func start命令重新启动,不然配置不会加载。启动时看日志,应该能看到类似这样的CORS配置输出:

[2024-xx-xxTxx:xx:xx.xxxZ] CORS policy allowed origins: http://localhost:4200

4. 检查Angular请求的细节

  • 如果请求带了凭证(比如withCredentials: true),必须保证local.settings.json里的CORSCredentials设为true,且CORS不能用*
  • 确认请求URL和函数完整路径完全一致,别多打或少打字符

5. 排除本地代理/防火墙干扰

暂时关闭Fiddler、本地防火墙这类工具,它们可能会拦截OPTIONS请求导致404,测试后再恢复。


内容的提问来源于stack exchange,提问作者Sandeep Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 07:27:03