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 ActionMethoddengan [ValidateInput(false)]dan matikan saja validasi permintaan untuk satu ActionMethod, yang berguna. Dan Anda tidak perlu membuat perubahan apa pun pada web.configfile 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.Unvalidatedpembantu dari System.Web.WebPages.dll. Ini akan mengembalikan UnvalidatedRequestValuesobjek 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 RequestValidatordan mengatur:
<httpRuntime requestValidationType="YourNamespace.YourValidator" />
(Di mana YourNamespace.YourValidatoryang 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.