2013-05-17 39 views
0

規定:不能使用base64編碼。我被告知不要增加有效負載,這是base64會做的。如何繞過HttpRequestValidationException僅僅一個請求值而不編碼值?

首選:單頁設置requestValidationMode到2.0,但I don't think this is possible

場景:用戶瀏覽並選擇圖像。前端將使用FileReader.readAsDataUrl(f)來抓取圖像,然後base64對它進行解碼(留下相當於FileReader.readAsBinaryString(f),但不兼容IE10),然後通過AJAX將其發送到我的IHttpHandler。

目前,這會拋出一個HttpRequestValidationException,因爲二進制數據包含有潛在危害的字符。這不是一個問題,因爲我們的後端會驗證數據。我如何僅僅根據這些數據修正/繞過這個預期?

回答

1

這花了一點挖,但這裏是答案:

在web.config中,添加:

<httpRuntime requestValidationMode="4.5" /> 

然後,您可以使用HttpRequest.Unvalidated屬性讀取未驗證表單值:

這是ASP.NET 4.5中的新增功能,並且被稱爲Deferred ("lazy") request validation

開發人員經常要求有能力選擇性地將 關閉請求驗證的應用程序。例如,如果你的應用 是論壇軟件,你可能要允許用戶提交 HTML格式的論壇帖子和評論,但仍確保 請求驗證檢查一切。

ASP.NET 4.5引入了兩個功能,使您可以輕鬆地 有選擇地使用未經驗證的輸入:延遲(「懶惰」)請求 驗證和訪問未驗證的請求數據。

對於一些人,你可能會碰到的問題,我不能說我明白其中的道理,只是通過改變requestValidationMode4.5,它會拋出一個System.StackOverflowException。在我的情況下解決這個問題,我只是設置我的處理程序的請求驗證模式,像這樣在web.config:

<location path="~/Handlers/MyHandler.ashx"> 
    <system.web> 
     <httpRuntime requestValidationMode="4.5" /> 
    </system.web> 
</location> 
相關問題