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

.NET Nancy自托管服务器返回视频文件遇404问题求助

解决Nancy自托管服务器返回视频文件404的问题

遇到Response.AsFile()返回视频时触发404的情况,我帮你一步步排查解决:

1. 先搞定最容易踩坑的路径问题

Nancy自托管的工作目录往往不是你默认以为的项目根目录或输出目录,用相对路径很容易找不到文件。一定要用绝对路径定位视频文件,比如借助AppDomain.CurrentDomain.BaseDirectory来拼接路径,确保程序能精准定位:

Get["/get-video/{fileName}"] = parameters =>
{
    var fileName = parameters.fileName.ToString();
    // 假设视频文件放在输出目录下的Videos子文件夹里
    var fullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Videos", fileName);
    
    // 手动检查文件是否存在,避免Nancy返回模糊的404提示
    if (!File.Exists(fullPath))
    {
        Console.WriteLine($"找不到目标文件:{fullPath}"); // 调试时打印路径,方便核对
        return HttpStatusCode.NotFound;
    }
    
    // 给视频设置正确的MIME类型,确保前端能正常播放
    var mimeType = GetVideoMimeType(fileName);
    return Response.AsFile(fullPath, mimeType);
};

// 辅助方法:根据文件扩展名返回对应MIME类型
private string GetVideoMimeType(string fileName)
{
    var ext = Path.GetExtension(fileName).ToLower();
    return ext switch
    {
        ".mp4" => "video/mp4",
        ".webm" => "video/webm",
        ".mov" => "video/quicktime",
        ".avi" => "video/x-msvideo",
        _ => "application/octet-stream"
    };
}

调试时一定要看控制台打印的fullPath,然后去文件管理器里核对这个路径下是否真的存在视频文件——绝大多数404都是路径拼接错误导致的。

2. 检查路由与请求是否完全匹配

  • 确保你的路由是Get方法(前端获取视频肯定是GET请求),别误写成Post或其他方法
  • 前端请求的URL要和路由完全对应,比如路由是/get-video/test.mp4,前端就不能请求/video/test.mp4
  • 如果路由包含参数(比如{fileName}),要确认参数传递正确,比如文件名里的特殊字符有没有编码/解码问题

3. 排查文件权限问题

有时候文件明明存在,但Nancy自托管的进程没有读取权限,也会返回404:

  • 避免把视频文件放在系统保护目录(比如C:\Windows),移到程序输出目录或其他非保护目录
  • 右键视频文件→属性→安全,确保运行服务器的用户(自托管一般是当前登录用户)有读取权限

4. 验证Nancy自托管的URL前缀

确认启动Nancy时注册的URL前缀和前端请求的一致,比如你注册的是http://localhost:8080,前端就不能请求http://192.168.1.100:8080(除非你额外注册了这个IP的前缀)。启动服务器的代码要确保前缀正确:

var host = new NancyHost(new Uri("http://localhost:8080"));
host.Start();

最后调试小技巧

在路由里加日志或控制台输出,确认请求是否真的走到了这个路由里:如果没走到,说明路由匹配有问题;如果走到了但File.Exists返回false,就是路径或权限问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:34:55