Estoy intentando escribir un objeto como JSON en mi Asp.Net MVC View usando Razor, así:
var potentialAttendees = @Json.Encode(Model.PotentialAttendees);
El problema es que en el resultado el JSON está codificado, y a mi navegador no le gusta. Por ejemplo:
var potentialAttendees = [{"Name":"Samuel Jack"},];
¿Cómo hago que Razor emita JSON sin codificar?
Tú lo haces:
@Html.Raw(Json.Encode(Model.PotentialAttendees))
En versiones anteriores a Beta 2 lo hiciste como:
@(new HtmlString(Json.Encode(Model.PotentialAttendees)))
El JsonConvert.SerializeObject de JsonConvert.SerializeObject
no se comporta de la misma manera que Json.Encode
y hacer lo que @ david-k-egghead sugiere te abre a los ataques XSS .
Suelte este código en una vista Razor para ver que el uso de Json.Encode
es seguro, y que Newtonsoft puede hacerse seguro en el contexto de JavaScript, pero no deja de tener un trabajo adicional.
" } } )); alert('jsonEncodePotentialAttendees passed XSS test: ' + jsonEncodePotentialAttendees[0].Name); " } }), addDoubleQuotes: true))); alert('safeNewtonsoftPotentialAttendees passed XSS test: ' + safeNewtonsoftPotentialAttendees[0].Name); " } })); alert('unsafeNewtonsoftPotentialAttendees passed XSS test: ' + unsafeNewtonsoftPotentialAttendees[0].Name);
Ver también:
Usando Newtonsoft