2

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

因此,我有一个名为 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 绑定到方法时会引发错误。

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

4

1 回答 1

5

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

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

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

[OperationContract]
[WebGet(UriTemplate = "/{domainName}/{username}", ResponseFormat = WebMessageFormat.Xml)]
IRestResponse GetProfile(String domainName, String username);
于 2008-10-14T16:31:00.337 回答