.NET7中用RestSharp+MailGun发附件报mediaType非空异常求助
问题
在.NET 7框架下使用RestSharp库调用MailGun API发送带附件的邮件时,抛出异常:The value cannot be null or empty. (Parameter 'mediaType')。注释掉附件相关代码后,邮件可正常发送。相关代码如下:
var client = new RestClient(new Uri(BaseUrl)) { Authenticator = new HttpBasicAuthenticator("api", ApiKey) }; var request = new RestRequest(); request.AddParameter("domain", domain, ParameterType.UrlSegment); request.Resource = $"{domain}/messages"; request.AddParameter("from", "noreply@smartbroker.com"); request.AddParameter("to", "ahuja.dinesh85@gmail.com"); request.AddParameter("subject", "test subject"); request.AddParameter("html", "hello"); //Attachment const string fileName = "D:\\ebook.pdf"; request.AddFile("attachment", fileName); request.Method = Method.Post; var response = await client.ExecuteAsync(request);
解决方案
问题出在调用AddFile方法时未指定媒体类型(MediaType),RestSharp处理文件上传时需要明确文件的MIME类型,否则会触发该空值异常。
你可以通过以下两种方式修复:
手动指定MIME类型
直接在AddFile方法中传入对应文件的媒体类型,比如PDF文件的MIME类型为application/pdf:const string fileName = "D:\\ebook.pdf"; request.AddFile("attachment", fileName, "application/pdf");让RestSharp自动推断MIME类型
使用文件流重载的AddFile方法,通过文件流和文件名让RestSharp自动识别媒体类型:const string fileName = "D:\\ebook.pdf"; using var fileStream = File.OpenRead(fileName); request.AddFile("attachment", fileStream, fileName);
注:MailGun API要求附件参数名为attachment(多附件可使用attachment[0]、attachment[1]这类格式),你的参数名设置是正确的,核心问题仅为缺失媒体类型。
内容的提问来源于stack exchange,提问作者Dinesh Ahuja
相关产品推荐
相关产品推荐

