Saya memiliki formulir di mana saya menggunakan ckeditor. Formulir ini berfungsi dengan baik di Asp.Net 2.0 dan 3.5 tetapi sekarang tidak berfungsi di Asp.Net 4+. Saya memiliki arahan ValidateRequest = "false". Ada saran?
Saya memiliki formulir di mana saya menggunakan ckeditor. Formulir ini berfungsi dengan baik di Asp.Net 2.0 dan 3.5 tetapi sekarang tidak berfungsi di Asp.Net 4+. Saya memiliki arahan ValidateRequest = "false". Ada saran?
Jawaban:
Ditemukan solusi di halaman kesalahan. Hanya perlu menambahkan requestValidationMode = "2.0"
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpRuntime requestValidationMode="2.0" />
</system.web>
Informasi MSDN: HttpRuntimeSection.RequestValidationMode Property
Ada cara untuk mengembalikan validasi ke 2.0 untuk satu halaman. Cukup tambahkan kode di bawah ini ke web.config Anda:
<configuration>
<location path="XX/YY">
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
</location>
...
the rest of your configuration
...
</configuration>
Saya tahu ini adalah pertanyaan lama, tetapi jika Anda menemukan masalah ini di MVC 3 maka Anda dapat menghiasnya ActionMethod
dengan [ValidateInput(false)]
dan matikan saja validasi permintaan untuk satu ActionMethod
, yang berguna. Dan Anda tidak perlu membuat perubahan apa pun pada web.config
file tersebut, sehingga Anda masih dapat menggunakan validasi .NET 4 request di tempat lain.
misalnya
[ValidateInput(false)]
public ActionMethod Edit(int id, string value)
{
// Do your own checking of value since it could contain XSS stuff!
return View();
}
Ini berfungsi tanpa mengubah mode validasi.
Anda harus menggunakan System.Web.Helpers.Validation.Unvalidated
pembantu dari System.Web.WebPages.dll
. Ini akan mengembalikan UnvalidatedRequestValues
objek yang memungkinkan untuk mengakses formulir dan QueryString tanpa validasi.
Sebagai contoh,
var queryValue = Server.UrlDecode(Request.Unvalidated("MyQueryKey"));
Bekerja untuk saya untuk MVC3 dan .NET 4.
Perhatikan bahwa pendekatan lain adalah untuk tetap dengan perilaku validasi 4.0, tetapi untuk menentukan kelas Anda sendiri yang berasal dari RequestValidator
dan mengatur:
<httpRuntime requestValidationType="YourNamespace.YourValidator" />
(Di mana YourNamespace.YourValidator
yang baik, Anda harus bisa menebak ...)
Dengan cara ini Anda menjaga keunggulan perilaku 4.0s (khususnya, bahwa validasi terjadi lebih awal dalam pemrosesan), sementara juga memungkinkan permintaan yang harus Anda biarkan masuk, melaluinya.