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

C#项目appsettings.json配置静态文件路径返回NotFound问题求助

问题排查方案

1. 配置绑定大小写不匹配问题

你appsettings.json里的路径键名是Realpath(首字母p小写),但模型类VirtualPathConfig的属性是RealPath(首字母P大写),.NET Core默认的配置绑定是区分大小写的,这会直接导致读取到的RealPath属性为null,物理路径自然无法正常生效。

修复方案:把appsettings.json里的Realpath修改为RealPath,或者给模型类的RealPath属性加上[JsonPropertyName("Realpath")]特性适配小写键名。

2. 相对路径解析错误问题

直接传入相对路径给PhysicalFileProvider时,路径是基于应用程序的工作目录解析的,不同启动场景(dotnet run启动、IIS部署、发布后直接运行)的工作目录可能不一致,相对路径很容易解析到错误位置。

修复方案:注入IWebHostEnvironment,用内容根路径拼接成绝对路径:

// 先在Startup构造函数注入IWebHostEnvironment
private readonly IWebHostEnvironment _env;
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
    Configuration = configuration;
    _env = env;
}

// 配置静态文件时拼接绝对路径
var vitualPath = Configuration.GetSection(nameof(VirtualPathConfig)).Get<List<VirtualPathConfig>>();
vitualPath.ForEach(f =>
{
    // 拼接得到物理路径的绝对地址
    var phyPath = Path.Combine(_env.ContentRootPath, f.RealPath);
    app.UseStaticFiles(new StaticFileOptions()
    {
        FileProvider = new PhysicalFileProvider(phyPath),
        RequestPath = f.RequestPath
    });
});

3. 检查配置文件属性

确认appsettings.json文件的【复制到输出目录】属性设置为如果较新则复制,否则发布或运行时配置文件不会被拷贝到运行目录,自然读不到对应配置。

4. 中间件顺序检查

确认UseStaticFiles的注册顺序在UseRouting之后、UseAuthorization/UseEndpoints之前,顺序错误会导致静态文件请求被后续中间件拦截返回404。

5. 文件夹层级校验

你配置的相对路径是../api_website_data/images,需要确认应用运行的工作目录和api_website_data文件夹的层级是否匹配:如果你的API项目根目录和api_website_data是同级目录,那工作目录为API项目根目录时,../会退到两个文件夹的上级目录,找不到对应路径,此时需要调整相对路径为./api_website_data/images或者直接使用绝对路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:06:03