在 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)的主要内容,如果未能解决你的问题,请参考以下文章
Django-rest-framework + React-Admin:URL 反斜杠问题