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

C#中HttpClient反斜杠转%5C导致API请求报错的问题求助

问题分析与解决方案

核心原因

你遇到的问题本质是URL编码规范与服务端实现不匹配:

  • C#的HttpClient(包括PowerShell的请求工具)会严格遵循HTTP标准,自动将反斜杠\编码为%5C,这是符合规范的行为。
  • Postman默认未对该反斜杠做编码处理,直接发送了原始字符,而你的服务端仅能识别未编码的\,没有正确解码标准URL编码后的%5C。

解决办法

方案1:绕过HttpClient自动编码(临时应急)

若暂时无法修改服务端,可手动构造不编码的请求URI:

  1. 拆分请求地址为基础地址和查询字符串两部分:
    string baseUrl = "http://192.168.78.42/ProcessData/AtProcessDataREST.dll/SQL";
    // 此处直接使用单个反斜杠,避免后续被编码
    string queryContent = "<SQL c=\"DRIVER={AspenTech SQLplus};HOST=localhost;UID=WEB3_NG\\centaure;PWD=XXXXXX;Port=10014;CHARINT=N;CHARFLOAT=N;CHARTIME=N;CONVERTERRORS=N\" m=\"10\" s=\"1\"><![CDATA[select tempsmoyen from cie_pontbascule]]></SQL>";
    
  2. 手动拼接并还原反斜杠:
    var uriBuilder = new UriBuilder(baseUrl);
    // 先对查询字符串做标准编码,再将编码后的%5C还原为\
    uriBuilder.Query = System.Web.HttpUtility.UrlEncode(queryContent).Replace("%5C", "\\");
    var response = await client.GetAsync(uriBuilder.Uri);
    
    或直接构造完整请求消息(非常规操作,仅应急):
    var requestMsg = new HttpRequestMessage(
        HttpMethod.Get, 
        "http://192.168.78.42/ProcessData/AtProcessDataREST.dll/SQL?<SQL c=\"DRIVER={AspenTech SQLplus};HOST=localhost;UID=WEB3_NG\\centaure;PWD=XXXXXX;Port=10014;CHARINT=N;CHARFLOAT=N;CHARTIME=N;CONVERTERRORS=N\" m=\"10\" s=\"1\"><![CDATA[select tempsmoyen from cie_pontbascule]]></SQL>"
    );
    var response = await client.SendAsync(requestMsg);
    

方案2:修复服务端(推荐)

按照HTTP标准,URL中的特殊字符必须编码,服务端应自动将%5C解码为\。当前服务端无法处理编码后的字符属于实现缺陷,建议修改服务端代码,对请求查询参数做标准URL解码后再解析,这样无论客户端是否按规范编码,都能正常处理请求。

关于禁用HttpClient自动编码的可能性

HttpClient的自动编码源于Uri类的默认行为,Uri会严格遵循HTTP标准编码特殊字符,没有全局配置项可以直接禁用该规则。仅能通过手动构造请求的方式绕过,但这属于非常规操作,不建议长期使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:35:55