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

C# Web API如何接收URL路径中(~.~)等特殊字符作为入参?

C# Web API URL特殊字符接收问题修复方案

问题根因

你访问报错的核心原因是(、)、.这类特殊字符属于URL保留字符,ASP.NET Web API默认的路由规则、IIS/IIS Express的请求过滤机制会直接拦截携带这类字符的路由段请求,防止恶意路径注入。

可落地的解决方案(按推荐优先级排序)

方案1:改用QueryString传递参数(最易用,改造成本最低)

不要把带特殊字符的参数放在路由路径段里,改成查询字符串传递:

  1. 修改路由和参数声明:
public class EmoticonController : ApiController
{
    [HttpGet]
    [Route("api/emoticon/abbreviation")]
    public string Abbreviation([FromQuery] string shortForm)
    {
        string outputMessage;
        switch (shortForm)
        {
            case "TY":
                outputMessage = "Thank you";
                break;
            case "(~.~)":
                outputMessage = "sleepy";
                break;
            default:
                outputMessage = "Invalid Input";
                break;
        }
        return outputMessage;
    }
}
  1. 访问路径改为:localhost/api/emoticon/abbreviation?shortForm=(~.~)即可正常访问。

方案2:修改配置允许路由段携带特殊字符(适合必须把参数放路径的场景)

在项目的Web.config文件中修改以下配置:

  1. 在<system.web>节点下添加配置,清空默认禁用的路径字符规则:
<httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" />
  1. 在<system.webServer>节点下添加配置,允许URL二次转义:
<security>
  <requestFiltering allowDoubleEscaping="true" />
</security>

修改后重启项目即可通过原路径localhost/api/emoticon/abbreviation/(~.~)访问,该方案存在一定的安全风险,仅适合内网接口使用。

方案3:改用POST请求传递参数(最稳妥,适合复杂输入场景)

如果后续要支持更多特殊表情、长文本缩写,直接改成POST接口,参数放请求体,完全避开URL特殊字符限制:

public class EmoticonController : ApiController
{
    [HttpPost]
    [Route("api/emoticon/abbreviation")]
    public string Abbreviation([FromBody] string shortForm)
    {
        // 原有逻辑保持不变
    }
}

调用时把参数放在JSON请求体中传递即可。

额外注意事项

前端传递特殊字符前可先做URL编码,例如(~.~)编码后为%28~.%7E%29,服务端会自动解码,能进一步降低特殊字符被拦截的概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:27:04