C# HttpClient Delete请求遇Unauthorized错误,Postman操作亦异常
以下是针对问题的排查和修复建议:
校验Basic授权字符串一致性
对比Postman生成的Authorization头和C#代码中的字符串,确保完全一致(包括空格、Base64编码结果)。可以手动验证编码:将用户名:密码用ASCII编码后转Base64,和代码中的字符串对比,避免编码错误。规范请求头写法
HTTP头名虽不区分大小写,但部分服务器可能严格校验,建议将代码中的authorization改为标准的Authorization,确保服务器能识别授权信息。同时对比Postman的请求头列表,确认C#代码没有遗漏必要的请求头。调整HttpClient的授权配置方式
避免HttpRequestMessage和HttpClient默认头的冲突,建议直接通过DefaultRequestHeaders配置授权:HttpClient client = new HttpClient(); // 清除默认授权头,避免冲突 client.DefaultRequestHeaders.Authorization = null; // 添加Basic授权 client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "你的Base64编码字符串"); // 设置User-Agent client.DefaultRequestHeaders.UserAgent.ParseAdd("你的User-Agent值"); var request = new HttpRequestMessage( HttpMethod.Delete, new Uri("https://listing-external-sit.hepsiburada.com/Listings/merchantid/*******/sku/*******/merchantsku/*********") ); using (var response = await client.SendAsync(request)) { // 先读取响应内容,获取详细错误信息 var body = await response.Content.ReadAsStringAsync(); if (!response.IsSuccessStatusCode) { MessageBox.Show($"状态码:{(int)response.StatusCode}\n响应内容:{body}"); return; } MessageBox.Show(body); }核对URL完整性
确认C#代码中的URL和Postman使用的完全一致,检查路径参数(merchantid、sku、merchantsku)是否正确,避免拼写错误或路径格式问题。获取详细响应信息
移除response.EnsureSuccessStatusCode()的直接调用,先读取响应内容,服务器返回的错误详情(如授权无效、权限不足)能直接帮你定位问题根源。
内容的提问来源于stack exchange,提问作者Erkan Demir
相关产品推荐
相关产品推荐

