2008-10-14 34 views
1

我正在WCF上構建REST服務,並且我正在編寫的其中一個方法是GetProfile,它將返回給定用戶名的配置文件。用戶名將包含用戶的域名,因此將具有以下格式:「DOMAIN \ username」。在REST WCF URL中使用反斜槓(%5c)

因此,我有一個名爲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中?還是反斜槓根本不允許?

回答

5

我懷疑他們只是不允許在該網址的部分。只要它們被編碼,它們在查詢字符串中都可以。作爲一般規則,我不會把任何東西放在URL的路徑部分,這在文件名中是無效的(即?)。

也許你可以使用不同的字符來從用戶名中刪除th域。

你也可以把用戶名分成域名和用戶名,並使用普通路徑定界符'/'。我不熟悉這一點足以知道這是否是你確實如此做的,但這將是我最好的猜測。

[OperationContract] 
[WebGet(UriTemplate = "/{domainName}/{username}", ResponseFormat = WebMessageFormat.Xml)] 
IRestResponse GetProfile(String domainName, String username); 
+2

這樣做似乎是正確的方法(/ {domainName}/{userName}),因爲域和名稱具有與REST良好表達的層次關係。 – 2008-10-14 17:06:21