我正在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形式)我收到以下错误:

Server error in '/' Application
HTTP Error 400 - Bad Request

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

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

有帮助吗?

解决方案

我怀疑他们根本不被允许进入网址的那一部分。只要它们被编码,它们在查询字符串中就可以了。作为一般规则,我不会在url的路径部分放置任何无效的文件名(即?)。

也许您可以使用其他字符来区分用户名。

您还可以将用户名分隔为域名和用户名,并使用正常的路径分隔符'/'。我不熟悉这一点,足以知道你是否这样做是肯定的,但这是我最好的猜测。

[OperationContract]
[WebGet(UriTemplate = "/{domainName}/{username}", ResponseFormat = WebMessageFormat.Xml)]
IRestResponse GetProfile(String domainName, String username);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top