2011-07-11 38 views
1

我有一個.NET 4 WCF服務作爲IIS網站與ASP.NET兼容模式運行。一旦服務方法接受一個字符串參數,並且當存在包含'&'的值時,ASP.NET管道會引發驗證異常。我已經分配了以下配置設置:如何禁用WCF服務的ASP.NET請求驗證?

<system.web> 
    <httpRuntime requestValidationMode="2.0"/> 
    <pages validateRequest="false"/> 
</system.web> 

並且錯誤仍然存​​在。無論輸入是否編碼,都會發生錯誤。我發現了一個潛在的解決方案here提示提供System.Web.Util.RequestValidator的自定義實現,但我不知道是否有可以只配置設置來進行選擇。

編輯: 我也發現this,但是提出的解決方案不能解決問題。

+0

只是讓我們很清楚:該程序調用WCF服務是以次充好,你沒有訪問到它的代碼來解決真正的問題?這是對的嗎? – NotMe

+0

我可以訪問調用代碼和服務。我想解決這個問題,而無需部署。更重要的是,我想知道是否有一種可接受的方式來解決問題,而不是提供自定義驗證器。我仍然希望輸入被驗證,我只是不希望它在諸如'a&b'之類的字符串上出錯。 – eulerfx

+1

我真的認爲你最好能夠正確編碼你提交的值,而不是降低防禦措施的權重。所以,當你說它發生時,即使輸入是上面編碼的,它是如何編碼的? - 有幾種方法。 – NotMe

回答

4

我已經找到了解決辦法。我設置了以下配置設置:

<system.web> 
    <httpRuntime requestPathInvalidCharacters=""/> 
</system.web> 

默認情況下,and符號是無效的路徑字符。

2

一些鏈接,可以幫助:

摘要: MS是指出,如果符號出現在查詢字符串,你應該使用%26。
http://connect.microsoft.com/wcf/feedback/details/527185/wcf-rest-uritemplate-does-not-recognise-or-amp-ampersand-as-same-character

摘要:海報談論使用&amp;
XmlReader chopping off whitespace after ampersand entity?

所以,如果它在查詢字符串%26編碼編碼它在WCF消息體的&。如果在消息編碼的身體作爲一個HTML實體:&amp;

+0

我正在使用正確的編碼方案,仍然收到相同的錯誤。將進一步調查。 – eulerfx