J'essaie d'écrire un objet au format JSON sur ma vue Asp.Net MVC en utilisant Razor, comme ceci:
<script type="text/javascript">
var potentialAttendees = @Json.Encode(Model.PotentialAttendees);
</script>
Le problème est que dans la sortie, le JSON est encodé et mon navigateur ne l'aime pas. Par exemple:
<script type="text/javascript">
var potentialAttendees = [{"Name":"Samuel Jack"},];
</script>
Comment faire pour que Razor émette du JSON non codé?
asp.net-mvc
json
razor
Samuel Jack
la source
la source
javascriptserializer
pour cela comme@Html.Raw(javascriptSerializerObjecct.Serialize(myObject))
Newtonsoft
JsonConvert.SerializeObject
ne se comporte pas de la même manièreJson.Encode
et faire ce que @ david-k-egghead suggère vous ouvre aux attaques XSS .Déposez ce code dans une vue Razor pour voir que l'utilisation
Json.Encode
est sûre et que Newtonsoft peut être sécurisé dans le contexte JavaScript, mais n'est pas sans travail supplémentaire.Voir également:
la source
Json.Encode
a été aussi longtemps que je me souvienne, mais l'inconvénient est qu'il utilise l'implémentation de Microsoft qui produit des dates non standard (et peut faire d'autres choses gênantes). J'utilise et j'encourage l'utilisation de NewtonsoftJsonConvert.SerializeObject
combinée avec un échappement approprié car il a un meilleur rendement.Utilisation de Newtonsoft
la source
JsonSerializerSettings.StringEscapeHandling
pour activer l'encodage. stackoverflow.com/a/50336590/6950124