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

MAUI通过POST API上传嵌入资源图片时遇ArgumentNullException

解决嵌入式资源流为Null的问题

核心原因

你代码里GetManifestResourceStream返回null,说明拼接的资源路径和实际嵌入式资源的完全限定名不匹配,导致找不到目标资源。

具体排查&解决步骤

  • 确认项目默认命名空间
    右键你的项目→属性→应用程序标签页,查看「默认命名空间」的值。比如你代码里写的MyProjectName是不是和这个实际值一致?如果不一致,替换掉代码里的MyProjectName。

  • 检查图片文件名的完整性
    确保selectedAvatar变量包含完整文件名(包括扩展名,比如avatar01.png),如果只传了文件名前缀(比如avatar01),拼接后的路径会缺失扩展名,自然找不到资源。

  • 验证资源的实际完整名称
    临时加一段代码,打印出所有嵌入式资源的名称,找到目标头像资源的正确路径:

    var assembly = typeof(RESTServices).GetTypeInfo().Assembly;
    foreach (var resourceName in assembly.GetManifestResourceNames())
    {
        System.Diagnostics.Debug.WriteLine("ResourceName: " + resourceName);
    }
    

    运行后查看输出,找到对应头像的完整名称,直接用这个名称替换你拼接的路径。

  • 修正资源路径拼接逻辑
    比如从输出里看到正确的资源名是ProjectName.Avatars.cat_avatar.png,那代码里可以直接使用这个完整名称,或者确保拼接逻辑正确,同时加空判断避免异常:

    // 假设selectedAvatar是带扩展名的完整文件名,比如"cat_avatar.png"
    string avatarResourceName = $"{assembly.GetName().Name}.Avatars.{selectedAvatar}";
    var stream = assembly.GetManifestResourceStream(avatarResourceName);
    if(stream != null)
    {
        var streamContent = new StreamContent(stream);
        content.Add(streamContent, "file", selectedAvatar);
    }
    else
    {
        System.Diagnostics.Debug.WriteLine($"找不到资源:{avatarResourceName}");
    }
    

额外注意点

  • 确认所有头像图片的「生成操作」确实设置为「嵌入式资源」,右键图片→属性→生成操作,检查是否正确配置。
  • 如果Avatars文件夹还有子文件夹,资源名需要加上子文件夹层级,比如ProjectName.Avatars.Male.avatar01.png。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:36:03