我正在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中?或者根本不允许使用反斜杠?
答案 0 :(得分:5)
我怀疑他们根本不被允许进入网址的那一部分。只要它们被编码,它们在查询字符串中就可以了。作为一般规则,我不会在url的路径部分放置任何无效的文件名(即?)。
也许您可以使用其他字符来区分用户名。
您还可以将用户名分隔为域名和用户名,并使用正常的路径分隔符'/'。我不熟悉这一点,足以知道你是否这样做是肯定的,但这是我最好的猜测。
[OperationContract]
[WebGet(UriTemplate = "/{domainName}/{username}", ResponseFormat = WebMessageFormat.Xml)]
IRestResponse GetProfile(String domainName, String username);