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
相关产品推荐
相关产品推荐

