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

调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:36:07