Comment puis-je écrire Json non codé dans View à l’aide de Razor?

J’essaie d’écrire un object en tant que JSON sur ma vue Asp.Net MVC en utilisant Razor, comme ceci:

 var potentialAttendees = @Json.Encode(Model.PotentialAttendees);  

Le problème est que, dans la sortie, le JSON est codé et mon navigateur ne l’aime pas. Par exemple:

  var potentialAttendees = [{"Name":"Samuel Jack"},];  

Comment puis-je faire en sorte que Razor émette un JSON non codé?

Tu fais:

 @Html.Raw(Json.Encode(Model.PotentialAttendees)) 

Dans les versions antérieures à la version bêta 2, vous l’avez fait comme:

 @(new HtmlSsortingng(Json.Encode(Model.PotentialAttendees))) 

JsonConvert.SerializeObject de JsonConvert.SerializeObject ne se comporte pas comme Json.Encode et fait ce que @ david-k-egghead suggère vous ouvre aux attaques XSS .

Déposez ce code dans une vue Razor pour vérifier que l’utilisation de Json.Encode est sûre et que Newtonsoft peut être sécurisé dans le contexte JavaScript, mais sans aucun travail supplémentaire.

 " } } )); 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);  

Voir également:

  • La sortie de JsonConvert.SerializeObject doit-elle être encodée en mode Razor?
  • Règles de prévention XSS

Utiliser Newtonsoft