2011-09-07 83 views
2

顯示錯誤消息「有潛在危險的Request.Form值」對用戶有一噸的這個特定的異常問題,但我找不到任何會適合我的需要。我不想禁用驗證,也不想手動轉義每個表單輸入值。如何在ASP.NET MVC 3

是否有以相同的方式來顯示此錯誤消息給用戶作爲ASP.NET MVC通知的形式不提供所需的值的用戶的方法嗎?我認爲這將是處理這種錯誤的最簡單的方法。

+0

你使用jQuery?沒有標籤,但我能想到的解決方案的客戶端,將可能工作 – hunter

+0

我可以使用jQuery,但不希望爲他們寫自己的驗證邏輯,因爲如果某種新的潛在危險值的驗證被添加到ASP.NET MVC的,它會從我的實現中丟失。 –

+0

另外,總有一種可能性,有人在沒有JavaScript支持的情況下使用我的網站,他們會被髮送到一個通用的「內部服務器錯誤」頁面,它不會告訴他們任何東西。 –

回答

1

這個錯誤只是ASP.NET中的一個安全網;一旦你檢查你正在編碼你的文本,微軟會希望你禁用這個錯誤。

這不是有關手動逸出每個輸入表格值。這是關於HTML編碼呈現給頁面的所有面向用戶的文本。只是在表單中輸入的文本經常顯示回用戶。

例如,字符串"My age is > 21 & < 90"不是有效的HTML,並且不會正確顯示給用戶(這可能會在跨站點腳本攻擊中被濫用)。如果您顯示的任何字符串不是有效的HTML,那麼您的已將對其進行HTML編碼。幸運的是,在MVC中有很多簡單的方法可以做到這一點(使用<%: %>的操作符就是其中之一)。如果您正確地執行此操作,則無需啓用此錯誤。

對不起,我知道這是不是你要的答案,但我相信保持開啓這個錯誤僅僅是對用戶不友好的原因是多方面的。

+0

這爲我澄清了它。我沒有意識到這只是一個安全網。 –

3
$("form").submit(function(e){ 
    var invalid = $("form").find("input:text,input:hidden,textarea").filter(function() { 
     var value = $(this).val(); 
     var encoded = $("<div>").html(value).text(); 
     return value != encoded; 
    }).length > 0; 

    if (invalid) 
    { 
     e.preventDefault(); 
     //show validation message 
    } 
} 
+0

這工作得很好;謝謝! – GendoIkari