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

ASP.NET Core API调用Graph API未找到用户仍返回200响应问题咨询

解决ASP.NET Core Web API调用Graph API返回用户不存在仍返回200的问题

问题原因分析

  1. Graph SDK默认行为:新版Microsoft Graph .NET SDK(v5+)默认不会对4xx/5xx状态码自动抛出ApiException,而是返回包含错误信息的响应对象,导致你的try-catch块无法捕获异常。
  2. 返回null的问题:即使捕获到异常后返回null,ASP.NET Core控制器会将null视为成功响应,默认返回200 OK,而不是错误状态码。

解决方案

方案1:配置GraphClient自动抛出异常

在创建GraphServiceClient时,启用ThrowOnError选项,让SDK在收到4xx/5xx响应时自动抛出ApiException:

var graphClient = new GraphServiceClient(yourAuthProvider, options =>
{
    options.HttpProvider.ThrowOnError = true;
});

之后修改控制器代码,捕获异常并返回明确的错误状态码:

try
{
    var result = await graphClient.Users[guestUPN].GetAsync();
    return Ok(result);
}
catch (ApiException ex) when (ex.StatusCode == System.Net.HttpStatusCode.NotFound)
{
    return NotFound("指定的用户不存在");
}
catch (ApiException ex)
{
    return StatusCode((int)ex.StatusCode, ex.Message);
}

方案2:手动检查响应状态(不依赖异常)

如果不想依赖自动抛出异常,可以请求完整响应并手动检查状态码:

var response = await graphClient.Users[guestUPN]
    .GetAsync(requestConfig =>
    {
        requestConfig.ResponsePreference = ResponsePreference.ReturnFullResponse;
    });

if (response.HttpStatusCode == System.Net.HttpStatusCode.NotFound)
{
    return NotFound("指定的用户不存在");
}

// 解析响应内容
var user = await response.Content.ReadFromJsonAsync<User>();
return Ok(user);

关键注意点

  • 永远不要直接返回null作为控制器结果,ASP.NET Core会将其映射为200 OK。需要使用NotFound()、BadRequest()等方法返回对应的HTTP错误状态码。
  • 确保Graph API的权限配置正确,避免因权限不足导致的其他错误响应。

内容的提问来源于stack exchange,提问作者Luís Costa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 18:42:44