A potentially dangerous Request.Form value was detected Hatası
Asp.Net MVC’de veritabanına HTML taglarını veya özel karakterleri kaydetmek isterken karşılan “Potansiyel olarak tehlikeli bir İstek Formu değeri algılandı” hatasının çözümünden bahsedeceğim.
Hatanın uygulanabilir iki çözüm yolu var. Birincisi aşağıda görüldüğü gibi Controller kısmımıza ValidateInput(“false”) özelliğini eklemek.
[HttpPost, ValidateInput(false)]
public ActionResult Index( string yazi)
{
using (DatabaseContext db = new DatabaseContext())
{
Tag tag = new Tag();
tag.Yazi = yazi;
db.Tag.Add(tag);
db.SaveChanges();
}// Bu kısım veritabanı kayıt işlemi
return RedirectToAction("Index");
}
Bu özelliği ekleyince istediğiniz yazıyı veritabanına ekliyor olacaksınız. Fakat bu yöntem ile bu Actiona gelen tüm değerler için bu özellik aktif olmuş olacak. Bu işlemi daha da özelleştirmek için ikinci yöntemi kullanabilirsiniz.
İkinci yöntemi uygulayabilmek için öncelikle aşağıdaki classı oluşturuyoruz.
public class AllowHtml : IModelBinder
{
public object BindModel(ControllerContext controllerContext,ModelBindingContext modelBindingContext)
{
return controllerContext.HttpContext.Request.Unvalidated[modelBindingContext.ModelName];
}
}
Classımızı oluşturduktan sonra controllere gidip parametre kısmımızı aşağıdaki gibi düzenliyoruz.
[HttpPost]
public ActionResult Index([ModelBinder(typeof(AllowHtml))] string yazi)
{
using (DatabaseContext db = new DatabaseContext())
{
Tag tag = new Tag();
tag.Yazi = yazi;
db.Tag.Add(tag);
db.SaveChanges();
}
return RedirectToAction("Index");
}
Bu şekildede kullanırsak veritabanına kayıt işlememiz tamamlanmış olcaktır.
Son olarak bu kaydettiğimiz verileri Viewe çekerken @Html.Raw’ı kullanabilirsiniz.
@foreach (var item in Model)
{
@Html.Raw(item.Yazi)<br />
}