反斜杠在 WebGet 中未被识别为参数

Backslash not recognized as param in WebGet

代码:

[OperationContract]
[WebGet(UriTemplate = "ProgrammerData/Document/{*documentName}")]
string ProgrammerDataDocument(string documentName);

通话:

图片文字:localhost/RedactedPath/ProgrammerData/Document/%5C%5Cxundas

结果

图片文字:

public string ProgrammerDataDocument(string documentName)
{
  // value of documentName at this point is "xundas"
  string a = "";
  return a;
}

我编码的反斜杠没有出现在我的参数中。

我需要这个,因为我从我的客户端发送了一个网络路径到我的服务器

URL 的资源名称中不允许使用反斜杠(浏览器会将其简单地转换为正斜杠);它们只能作为查询参数的编码值。

我建议在你的路径中扩展域部分和名称部分,例如

[OperationContract]
[WebGet(UriTemplate = "ProgrammerData/Document/{docDomain}{docName}")]
string ProgrammerDataDocument(string docDomain, string docName);

您可能想在 domain/UNC 部分(这是空的,所以基本上是 .,即您的示例中的 local )和文档名称之间添加一个斜杠作为分隔符从层次结构的角度来看这是有道理的。

起初,当我们将反斜杠传递给服务器时,浏览器不支持反斜杠。任何反斜杠都将转换为正斜杠。因此这是不可能实现的。
此外,参数前的正斜杠和反斜杠都无法识别(尚未加密),但参数中间的斜杠会被识别并自动转换为反斜杠。最后,返回结果时,Url 支持正斜杠。请考虑以下代码。

[OperationContract]
        [WebGet(UriTemplate ="abc/{*value}")]
        string GetData(string value);


    public string GetData(string value)
            {
                var result = System.Net.WebUtility.UrlDecode(value);
                result = result.Replace("/", @"\");
                return result;
            }

结果。

关于 UriTemplate。
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/uritemplate-and-uritemplatetable?redirectedfrom=MSDN
如果有什么我可以帮忙的,请随时告诉我。