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

部署至Azure的Azure Functions返回404 Not Found错误求助

Azure函数部署后返回404错误的排查方案
  • 检查访问路径的正确性
    本地测试的路由cities/{idCity:int}在Azure部署后,默认需要加上函数应用的域名前缀和/api路由前缀,完整访问路径应为https://<你的函数应用名>.azurewebsites.net/api/cities/1。不要手动拼接路径,直接在Azure门户的函数详情页点击「获取函数URL」复制完整地址测试。若你在host.json中修改了默认路由前缀(比如移除/api),需对应调整访问路径。

  • 确认函数的启用状态与触发器注册
    登录Azure门户进入函数应用,检查FindCityById函数的状态为「已启用」,且触发器类型显示为HTTP触发器。查看「监控」日志:如果日志中无请求记录,说明请求未到达函数,大概率是路径错误;如果有请求记录但返回404,继续排查后续点。

  • 修正DbContext的实例化方式
    你当前在构造函数中手动new AppDbContext()的方式存在问题:Azure环境下可能因配置加载失败导致DbContext初始化异常,进而函数无法正常启动,表现为404。正确做法是通过依赖注入管理DbContext和CityService:

    public class CityFunction
    {
        private readonly CityService _cityService;
    
        // 构造函数注入依赖
        public CityFunction(CityService cityService)
        {
            _cityService = cityService;
        }
    
        private JsonSerializerOptions GetJsonSerializerOptions()
        {
            return new JsonSerializerOptions
            {
                WriteIndented = true,
                ReferenceHandler = System.Text.Json.Serialization.ReferenceHandler.IgnoreCycles,
            };
        }
    
        [FunctionName("FindCityById")]
        public async Task<IActionResult> FindCityById(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "cities/{idCity:int}")]
                HttpRequest req,
            int idCity,
            ILogger log
        )
        {
            var city = await _cityService.FindCityById(idCity);
            var jsonSerializerOptions = GetJsonSerializerOptions();
            var jsonResponse = JsonSerializer.Serialize(city, jsonSerializerOptions);
            return city != null
                ? new ContentResult
                {
                    Content = jsonResponse,
                    ContentType = "application/json",
                    StatusCode = 200,
                }
                : new NotFoundResult();
        }
    }
    

    同时在启动类中注册服务(以.NET 6+的Program.cs为例):

    var host = new HostBuilder()
        .ConfigureFunctionsWorkerDefaults()
        .ConfigureServices(services =>
        {
            // 注册DbContext,从环境变量读取连接字符串
            services.AddDbContext<AppDbContext>(options =>
                options.UseNpgsql(Environment.GetEnvironmentVariable("PostgresConnection")));
            // 注册CityService
            services.AddScoped<CityService>();
        })
        .Build();
    
    host.Run();
    
  • 验证连接字符串配置
    在Azure门户的函数应用「配置」中,确认已添加PostgreSQL的连接字符串,名称与DbContext中使用的一致。本地测试可能依赖appsettings.json,但Azure环境下需通过门户配置环境变量或连接字符串,否则DbContext无法正确连接数据库,导致函数启动失败。

  • 检查运行时版本与部署完整性
    确认本地开发使用的.NET版本与Azure函数应用配置的运行时版本完全一致(如.NET 6或.NET 7)。同时检查部署过程,确保所有必要文件(如依赖项、配置文件)已正确部署,可通过「高级工具(Kudu)」查看部署文件是否完整。

内容的提问来源于stack exchange,提问作者enzo gabriel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 13:57:26