我正在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);