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

MVC C#调用含client-id认证的API返回400 Bad Request问题排查

API调用400 Bad Request错误解决(C# MVC)

问题概况

调用需client-id、app-id、app-key认证的API时,Postman设置请求头可正常请求,但C# MVC代码调用返回400错误,报错信息:

System.Net.WebException: 'The remote server returned an error: (400) Bad Request.'

错误排查与修复方案

1. 修正Authorization请求头

原代码中AuthenticationHeaderValue参数顺序错误:

// 错误写法
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Authorization", "Basic");

AuthenticationHeaderValue第一个参数是认证方案(如Basic),第二个是凭证内容。如果Postman未配置该头,直接删除此行;若需Basic认证,需将对应凭证Base64编码后传入:

// 示例:用client-id和app-key生成Basic凭证
var authStr = Convert.ToBase64String(Encoding.ASCII.GetBytes("你的client-id:你的app-key"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authStr);

2. 修复BaseAddress语法错误

原代码newUri拼写错误,应为new Uri:

client.BaseAddress = new Uri("https://***********v2/");

3. 校验请求体序列化匹配度

PostAsJsonAsync会将tripelm对象序列化为JSON,若类属性与API要求的字段名、类型不匹配,会触发400错误。可通过以下方式验证:

  • 对比Postman的请求体JSON与代码序列化后的内容
  • 临时输出序列化结果:
    var json = Newtonsoft.Json.JsonConvert.SerializeObject(trips);
    // 查看json内容,确认和Postman请求体一致
    

4. 获取API返回的详细错误信息

添加代码读取400响应的具体错误描述,定位问题:

var result = await client.PostAsJsonAsync<tripelm>("trips", trips);
if (!result.IsSuccessStatusCode)
{
    var errorDetail = await result.Content.ReadAsStringAsync();
    // 输出errorDetail查看API返回的具体错误提示
}

修复后示例代码

[HttpPost]
public async Task Drivere(tripelm trips)
{
    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri("https://***********v2/");

        // 按需保留或修正Authorization头
        // var authStr = Convert.ToBase64String(Encoding.ASCII.GetBytes("*******DD0:2aa****d4ad"));
        // client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authStr);
        
        client.DefaultRequestHeaders.Add("client-id", "*******DD0");
        client.DefaultRequestHeaders.Add("app-id", "*******");
        client.DefaultRequestHeaders.Add("app-key","2aa****d4ad");

        var result = await client.PostAsJsonAsync<tripelm>("trips", trips);
        
        if (result.IsSuccessStatusCode)
        {
            // return RedirectToAction("Index");
        }
        else
        {
            var errorMsg = await result.Content.ReadAsStringAsync();
            // 处理错误日志或业务逻辑
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:54:22