在 REST WCF URL 中使用反斜杠 (%5c)

Posted

技术标签:

【中文标题】在 REST WCF URL 中使用反斜杠 (%5c)【英文标题】:Using a backslash (%5c) in a REST WCF URL 【发布时间】:2010-09-17 03:23:02 【问题描述】:

我正在 WCF 上构建一个 REST 服务,我正在编写的方法之一是 GetProfile,它将返回给定用户名的配置文件。用户名将包含用户的域,因此格式如下:“DOMAIN\username”。

因此,我有一个名为 Profiles.svc 的服务,它设置了以下端点:

[OperationContract]
[WebGet(UriTemplate = "/username", ResponseFormat = WebMessageFormat.Xml)]
IRestResponse GetProfile(String username);

但是,当我尝试访问http://server/profiles.svc/DOMAIN%5cusername 的服务时(%5c 是反斜杠的 urlencoded 形式),我收到以下错误:

“/”应用程序中的服务器错误
HTTP 错误 400 - 错误请求

即使在我的 GetProfile 实现中没有实际定义代码时也会发生这种情况,因此我相信在 WCF 尝试将 URI 绑定到方法时会引发错误。

是否需要将一些设置添加到我的 Web 服务配置中才能允许将反斜杠添加到 REST WCF 服务中的 URL?还是根本不允许使用反斜杠?

【问题讨论】:

【参考方案1】:

我怀疑它们根本不允许出现在 url 的那部分。只要对它们进行编码,它们就可以在查询字符串中使用。作为一般规则,我不会在文件名中无效的 url 的路径部分中放置任何内容(即?)。

也许您可以使用不同的字符来区分域与用户名。

您还可以将用户名分成域名和用户名,并使用正常的路径分隔符“/”。我对此并不熟悉,无法确定您是否这样做,但这是我最好的猜测。

[OperationContract]
[WebGet(UriTemplate = "/domainName/username", ResponseFormat = WebMessageFormat.Xml)]
IRestResponse GetProfile(String domainName, String username);

【讨论】:

这似乎是正确的做法 (/domainName/userName),因为域和名称具有层次关系,可以用 REST 很好地表达。 不错的解决方案。我们也必须从 REST url 中省略 /。

以上是关于在 REST WCF URL 中使用反斜杠 (%5c)的主要内容,如果未能解决你的问题,请参考以下文章

WCF Rest 4.0 中没有斜杠的简单 URL 路由

Django-rest-framework + React-Admin:URL 反斜杠问题

求教springmvc url中的斜杠怎么处理

shell脚本如何把反斜杠替换成斜杠反斜杠,比如2014\/5\/10变成2014/5/10,急用谢谢!

URL最后结尾反斜杠(/)加与不加区别

python urlencode() 反斜杠处理问题