You need to enable JavaScript to run this app. ASP.NET Core HttpClient请求WebAPI返回200但接口实际返回406问题
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core HttpClient请求WebAPI返回200但接口实际返回406问题

问题核心原因

你的API端写法存在根本性错误,你自行创建的HttpResponseMessage对象根本没有作为实际HTTP响应返回,最终输出的HTTP响应状态码是框架默认的200:

  • 你定义的接口返回类型是string,不管你在方法内构造了什么状态的HttpResponseMessage对象,最后只返回了该对象状态码的字符串值,这个字符串只会作为响应体内容返回,不会修改实际HTTP响应的状态码
  • 你在API端控制台打印的只是你自己构造的本地对象的值,不是框架实际发回给客户端的HTTP响应属性

修复方案

1. 修改API端接口返回类型与返回逻辑

将返回类型改为IActionResult,直接返回对应状态码的结果即可:

[HttpPost]
public IActionResult Login(object data)
{
    UserLogin credentials = JsonConvert.DeserializeObject<UserLogin>(data.ToString());
    
    Console.WriteLine(credentials.Username + " " + credentials.Password);
    // 注意:原有登录逻辑有严重安全问题,不要分开查询用户名和密码,要校验同一个用户是否同时匹配两个字段
    User validUser = db.Users.FirstOrDefault(user => user.Username == credentials.Username && user.Password == credentials.Password);

    if (validUser != null)
    {
        return Ok(); // 对应200状态码
    }
    else
    {
        return StatusCode(StatusCodes.Status406NotAcceptable); // 对应406状态码
    }
}

额外提醒:不要明文存储用户密码,生产环境必须存储加盐哈希后的密码。

2. 优化客户端判断逻辑

不要依赖ReasonPhrase判断响应状态,直接判断StatusCode属性更可靠:

if (response.StatusCode == HttpStatusCode.OK)
{
    redirectPage = "Success";
}
else
{
    Console.WriteLine("Bad Login");
    redirectPage = "LoginPage";
}

内容的提问来源于stack exchange,提问作者jk819

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 10:15:05