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

WCF REST Web服务如何在参数中传递URL?

解决WCF REST服务传递含特殊字符路径参数的问题

首先得说明,你添加的<pages validateRequest="false" />其实对WCF REST服务没太大作用——这个配置是给ASP.NET Web Forms页面用的,而WCF有自己的请求处理管道,所以得针对WCF和IIS的HTTP运行时来调整配置。

下面是具体的解决步骤:

1. 调整ASP.NET HTTP运行时的路径字符限制

在web.config的<system.web>节点下,修改<httpRuntime>的requestPathInvalidCharacters属性,把默认禁止的冒号(:)和反斜杠(\)移除,因为这两个字符是你路径参数里的关键部分:

<system.web>
  <!-- 移除默认禁止的:和\,保留其他危险字符限制 -->
  <httpRuntime requestPathInvalidCharacters="&lt;,&gt;*,%,&amp;" />
</system.web>

2. 配置IIS的请求过滤规则

IIS的requestFiltering模块也会拦截含特殊字符的请求,所以需要在<system.webServer>节点下开启双重转义,并确保没有禁止相关字符的规则:

<system.webServer>
  <security>
    <requestFiltering>
      <!-- 允许双重转义,避免编码后的特殊字符被拦截 -->
      <allowDoubleEscaping>true</allowDoubleEscaping>
    </requestFiltering>
  </security>
</system.webServer>

3. 优化参数传递方式(可选但推荐)

直接把路径放在URL路径段里容易触发各种拦截,更稳妥的方式是把DirectoryName改成查询字符串参数,调整你的接口定义:

<OperationContract()> 
<WebInvoke(Method:="Get", 
           UriTemplate:="GetFileList?DirectoryName={DirectoryName}", 
           RequestFormat:=WebMessageFormat.Json, 
           ResponseFormat:=WebMessageFormat.Json, 
           BodyStyle:=WebMessageBodyStyle.Wrapped)>
Function GetFileList(ByVal DirectoryName as String) As ArrayList

这样请求地址就变成:localhost:49658/Service.svc/GetFileList?DirectoryName=C:\Programs,查询字符串的特殊字符处理限制更少,也更符合REST的最佳实践。

4. 修正服务实现的返回值错误

另外注意你的服务实现代码有个明显问题:接口声明返回ArrayList()(数组),但你实际返回的是字符串,这会导致编译错误,得修正一下,比如:

Public Function GetFileList(ByVal DirectoryName as String) As ArrayList Implements IService.GetFileList
    Dim resultList As New ArrayList()
    resultList.Add("------ " & DirectoryName & " ---------")
    Return resultList
End Function

做完这些配置和代码调整后,应该就能正常传递带冒号和反斜杠的路径参数了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:08:47