Saya mencoba untuk menulis objek sebagai JSON ke Asp.Net MVC View saya menggunakan Razor, seperti:
<script type="text/javascript">
var potentialAttendees = @Json.Encode(Model.PotentialAttendees);
</script>
Masalahnya adalah bahwa dalam output JSON dikodekan, dan browser saya tidak menyukainya. Sebagai contoh:
<script type="text/javascript">
var potentialAttendees = [{"Name":"Samuel Jack"},];
</script>
Bagaimana cara membuat Razor memancarkan JSON yang tidak dilodekan?
asp.net-mvc
json
razor
Samuel Jack
sumber
sumber
javascriptserializer
untuk itu seperti@Html.Raw(javascriptSerializerObjecct.Serialize(myObject))
Newtonsoft
JsonConvert.SerializeObject
tidak berperilaku sama denganJson.Encode
dan melakukan apa yang disarankan oleh @ david-k-egghead akan membuka Anda terhadap serangan XSS .Masukkan kode ini ke tampilan Razor untuk memastikan bahwa penggunaan
Json.Encode
aman, dan Newtonsoft dapat dibuat aman dalam konteks JavaScript tetapi bukan tanpa kerja ekstra.Lihat juga:
sumber
Json.Encode
telah ada selama yang saya ingat, tetapi downside adalah bahwa ia menggunakan implementasi Microsoft yang menghasilkan tanggal yang tidak standar (dan dapat melakukan hal-hal mengganggu lainnya). Saya menggunakan dan mendorong penggunaan Newtonsoft yangJsonConvert.SerializeObject
dikombinasikan dengan pelarian yang tepat karena memiliki keluaran yang lebih baik.Menggunakan Newtonsoft
sumber
JsonSerializerSettings.StringEscapeHandling
untuk mengaktifkan penyandian. stackoverflow.com/a/50336590/6950124