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

如何向Web API传递空字符串类型的路由参数?

问题原因
  1. URL路径中的连续斜杠会被ASP.NET路由模块以及Web服务器(如IIS)自动合并为单个斜杠,你请求https://localhost:44319/api/SearchSelectController//Tom时,实际解析后的路径是api/SearchSelectController/Tom,只有1个路径参数,无法匹配你定义的需要2个路径参数的路由规则,导致匹配失败。
  2. 你示例中控制器定义名为SearchController,但调用地址中写的是SearchSelectController,名称不一致也是报错的原因之一,需要先统一控制器名称。
可行解决方案

方案1:改用查询字符串传递参数(最推荐)

把参数从路由路径中移到URL查询部分,空字符串可以直接正常传递,不会触发斜杠合并问题:
修改路由,去掉路径中的参数定义:

public class SearchController : ApiController
{
    [Route("api/SearchController")]
    public string Get(string paramOne, string paramTwo)
    {
        return "The [Route] with multiple params worked.\nP1 : " + paramOne + "    P2 : " + paramTwo;
    }
}

调用时使用如下格式即可传递空参数:
https://localhost:44319/api/SearchController?paramOne=&paramTwo=Tom

方案2:路由参数标记为可选并设置默认空值

修改Route属性的参数定义,添加?标记为可选,同时给Action参数设置默认空字符串,可配合自定义占位符实现空值传递:

public class SearchController : ApiController
{
    [Route("api/SearchController/{paramOne?}/{paramTwo?}")]
    public string Get(string paramOne = "", string paramTwo = "")
    {
        // 约定占位符_代表空字符串,接收后做替换
        paramOne = paramOne == "_" ? "" : paramOne;
        paramTwo = paramTwo == "_" ? "" : paramTwo;
        return "The [Route] with multiple params worked.\nP1 : " + paramOne + "    P2 : " + paramTwo;
    }
}

调用时格式为:https://localhost:44319/api/SearchController/_/Tom

方案3:修改Web服务器配置允许连续斜杠

如果必须保留路径参数的写法,可修改Web.config配置,禁用斜杠自动合并:
在<system.web>节点下添加:

<httpRuntime relaxedUrlToFileSystemMapping="true" />

在<system.webServer>节点下添加:

<security>
  <requestFiltering allowDoubleEscaping="true" />
</security>

该方案兼容性较差,不同版本的IIS/.NET Framework表现可能不一致,不优先推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 06:06:06