ASP.NET Core 6/MVC/İçerik Biçimlendirme
Bu bölümde MVC'nin sağladığı iki farklı işlevi göreceğiz. İlk olarak kullanıcının verdiği string'in geçerli bir HTML verisi olmamasını sağlamak için encode işleminin nasıl yapılacağını, ikinci olarak da JSON formatında nasıl veri üretebileceğimizi göreceğiz.
HTML encoding
değiştirVarsayalım veritabanında depolamak için kullanıcıdan bir form kontrolü kullanarak bir string veri alıyorsunuz. Aldığınız bu verinin HTML olarak yorumlanmaması gerekir. Eğer herhangi bir encoding işlemi yapılmadan veriyi direkt veritabanına kaydederseniz aynı veriyi başka bir kişiye sunduğunuzda bu veride HTML ve dahası HTML içinde JavaScript varsa bu JavaScript kodu veriyi sunduğunuz bu kişinin bilgisayarında çalışacak ve kullanıcıya özgü özel bilgileri herhangi bir yere (örneğin saldırganın bilgisayarına) gönderebilecektir. Neyse ki bu encoding işlemi ASP.NET Core tarafından otomatik yapılmaktadır.
Şimdi projenizdeki Home controller'ına aşağıdaki action'ı ekleyin:
public IActionResult Html() {
return View((object)"This is a <h3><i>string</i></h3>");
}
Burada View() metoduna verdiğimiz stringi ASP.NET Core view ismi olarak algılamasın diye object'e çevirdik. Şimdi Views/Home klasöründe Html.cshtml isimli bir view ekleyelim ve içeriği şöyle olsun:
@model string
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div>@Model</div>
</body>
</html>
View basitçe kendisine verilen stringi ekrana basmaktadır. Programı çalıştırıp /Home/Html path'ına talepte bulunduğunuzda View() metoduna verilen string'in doğru bir şekilde encode edildiğini ve HTML olarak algılanmadığını görürsünüz. Çoğunlukla bu istediğimiz şeydir. Ancak bazen verinin gerçekten HTML olarak algılanmasını isteyebiliriz. Bunun için Html yardımcısı üzerinden erişilen Raw() metodunu kullanırız. Şimdi Html view'ının body'sini şöyle değiştirelim:
<div>@Html.Raw(Model)</div>
Artık Model stringi HTML olarak algılanacak ve modelin içindeki "string" metni eğik ve <h3> biçimlendirmesine göre sayfaya basılacaktır.
JSON encoding
değiştirMVC içinde de veriyi web servislerde yaptığımız gibi JSON'a serialize edebiliriz. Bunun yapmamızın temelde iki nedeni olabilir. İlk neden zaten sunduğumuz bir web sayfası JavaScript üzerinden sunucumuzdan yeni nesneler talep ettiğinde bunları JSON ile gönderebiliriz. İkinci neden debug amaçlıdır ve geliştirme aşamasında sorun çıktığında sorun çıkan nesnenin içeriğini görmek amaçlı nesneyi JSON'a serialize edebiliriz. Her view'ın view sınıfında Json isimli bir özellik vardır, bu özellik üzerinden Serialize() metodunu çağırarak JSON2a serialize yapabiliriz. Örneğin Home controller'ına Json isimli bir action ve bu action'a karşılık Json.cshtml isimli bir view ekleyelim. Action şöyle olsun:
public IActionResult Json()
{
var v = new { Ozellik1 = "deger1", Ozellik2 = "deger2", Ozellik3 = "deger3" };
return View(v);
}
View da şöyle olsun:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
</head>
<body>
@Json.Serialize(Model)
</body>
</html>
Bu örneğimiz debug amaçlıdır ve ilgili nesnenin JSON karşılığını tarayıcı ekranında göstermektedir.