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

C#跨API调用Post接口返回404:URI含特殊字符问题

解决C# API调用时因隐藏字符导致的404错误

问题根源

你遇到的%E2%80%8B是**零宽空格(Zero-Width Space)**的URL编码,这种字符肉眼不可见,但会被.NET的URI处理逻辑识别为有效字符,导致最终请求的路径被篡改,后端无法匹配到正确端点,从而返回404。

从代码来看,字符串拼接的URL中($"{baseUrl}/v1/​abc/add"),v1/与abc之间、abc与/add之间大概率混入了这种隐藏字符,通常是复制粘贴外部文本时带入的。

修复方案

方案1:手动清理隐藏字符

直接重新输入URL路径部分,确保没有不可见字符:

var baseUrl = "https://services.abc.com:1232/something";     
HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Post, $"{baseUrl}/v1/abc/add");
requestMessage.Content = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json");
var response = await client.SendAsync(requestMessage);

方案2:使用Uri构造函数拼接(更可靠)

避免直接字符串拼接,改用Uri的嵌套构造函数处理路径拼接,它会自动过滤或规范化非法字符:

var baseUrl = new Uri("https://services.abc.com:1232/something");
var endpoint = "/v1/abc/add";
HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Post, new Uri(baseUrl, endpoint));
requestMessage.Content = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json");
var response = await client.SendAsync(requestMessage);

验证方法

可以将拼接后的URI输出到日志或控制台,检查是否还包含%E2%80%8B编码:

Console.WriteLine(requestMessage.RequestUri.AbsoluteUri);

也可以在代码编辑器中开启显示控制字符的功能(比如VS Code开启"控制字符可见性"),直接查看原始字符串中的隐藏字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:34:54