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 />
}

Furkan Aktaş

Bilgisayar Mühendisiyim. Microsoft MCSA Web Applications Sertifikasına Sahibim. Aktif iş hayatımda .Net Developer olarak çalışmaktayım.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir