2013-10-25 58 views
0

變量我有以下合約:WCF REST服務 - 用反斜槓

[OperationContract] 
[WebGet(UriTemplate = "Devices/{*id}", ResponseFormat = WebMessageFormat.Json)] 
Device GetDevice(string id); 

設備可以包含反斜槓的ID爲「\」和「&」,因爲它代表了一個設備的路徑。

當我發送帶有id的GET請求時,GetDevice函數接收到id,但斜線「/」而不是反斜槓「\」。

任何方式來防止這種情況?

+0

它是一個編碼問題? http://meyerweb.com/eric/tools/dencoder/建議'test1 \ test2&test3'的編號應該編碼爲'test1%5Ctest2%26test3'。 –

+0

我想這不是一個相關的問題。當通過'test1%5Ctest2%26test3'時,它收到'test1/test2&test3':/ – anpa

回答

2

看看this article here關於如何處理傳遞給WCF服務的實體鍵中的特殊字符。

記在你的情況是,關閉請求過濾並不妨礙反斜槓從得到錯位:

<httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0"/> 
<pages validateRequest="false"/> 

斜線和問號是有問題的,因爲底層的URI語法分析器進行反向轉義原始的URI ...這裏對於那些三個字符解決方法:

<configSections> 
    <section name="uri" type="System.Configuration.UriSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> 
</configSections> 
<uri> 
    <schemeSettings> 
     <add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes"/> 
     <add name="https" genericUriParserOptions="DontUnescapePathDotsAndSlashes"/> 
    </schemeSettings> 
</uri> 

(也公然從文章被盜。)