调用Outlook REST API更新MailboxSettings时遇415不支持的媒体类型错误
解决Outlook REST API调用时的415 Unsupported Media Type错误
嘿,这个415错误我之前也碰到过,其实核心原因很简单:服务器不认可你发送请求的内容格式。Outlook REST API更新邮箱设置时,要求必须发送JSON格式的数据,而且要在请求头里明确声明这个媒体类型。咱们一步步来解决:
错误原因拆解
415状态码的本质是:服务器收到的请求里,Content-Type头指定的媒体类型它不支持,或者你发送的内容格式和声明的类型不匹配。对于Outlook的MailboxSettings更新接口来说,它只接受application/json类型的请求体。
具体解决方案
你需要在C#的WebClient调用中做两个关键调整,再确保请求数据的格式正确:
1. 正确设置请求头
必须添加Content-Type: application/json的请求头,同时别忘了带上有效的OAuth2令牌的Authorization头。
2. 将自动回复序列化为合法JSON
把你的自动回复设置对象转换成符合API要求的JSON字符串,避免格式错误。
完整代码示例
首先定义匹配API结构的实体类(方便序列化):
public class AutomaticRepliesSetting { public string Status { get; set; } // 可选值:"AlwaysEnabled"、"Disabled"、"Scheduled" public DateTimeOffset StartTime { get; set; } // 仅当Status为Scheduled时需要 public DateTimeOffset EndTime { get; set; } // 仅当Status为Scheduled时需要 public InternalReply InternalReply { get; set; } public ExternalReply ExternalReply { get; set; } } public class InternalReply { public string Message { get; set; } } public class ExternalReply { public string Message { get; set; } }
然后是WebClient的调用代码:
using System; using System.Net; using System.IO; using Newtonsoft.Json; // 或者用System.Text.Json,根据你的项目引用选择 // 替换成你的OAuth2令牌 string oAuthToken = "your_valid_oauth_token_here"; using (var client = new WebClient()) { // 设置授权头 client.Headers.Add(HttpRequestHeader.Authorization, $"Bearer {oAuthToken}"); // 关键:设置Content-Type为application/json client.Headers.Add(HttpRequestHeader.ContentType, "application/json"); // 构造自动回复设置 var autoReplyConfig = new AutomaticRepliesSetting { Status = "Scheduled", StartTime = DateTimeOffset.UtcNow, EndTime = DateTimeOffset.UtcNow.AddDays(2), InternalReply = new InternalReply { Message = "我正在休假,内部同事请联系我的备用联系人XXX。" }, ExternalReply = new ExternalReply { Message = "我目前不在办公室,会在工作日尽快回复您的邮件。" } }; // 序列化为JSON字符串 string jsonPayload = JsonConvert.SerializeObject(autoReplyConfig); // 如果用System.Text.Json,替换为: // string jsonPayload = System.Text.Json.JsonSerializer.Serialize(autoReplyConfig); try { // 发送PUT请求到Outlook API端点(更新操作必须用PUT) string response = client.UploadString( "https://outlook.office.com/api/v2.0/me/mailboxsettings", "PUT", jsonPayload ); Console.WriteLine("自动回复设置更新成功!"); } catch (WebException ex) { // 捕获异常并输出详细错误信息,方便排查 if (ex.Response != null) { using (var reader = new StreamReader(ex.Response.GetResponseStream())) { string errorDetails = reader.ReadToEnd(); Console.WriteLine($"错误详情:{errorDetails}"); } } } }
额外注意事项
- 权限检查:确保你的OAuth2令牌拥有
MailboxSettings.ReadWrite的权限,否则会返回权限不足的错误。 - HTTP方法:更新邮箱设置必须使用
PUT方法,用POST会导致错误。 - JSON格式验证:如果序列化后的JSON有语法错误(比如引号不闭合),也可能触发415错误,可以用在线JSON校验工具检查你的payload。
内容的提问来源于stack exchange,提问作者Chris Petchey
相关产品推荐
相关产品推荐

