Come posso scrivere JSON non codificato sulla mia vista usando Razor?

Sto cercando di scrivere un object come JSON nel mio Asp.Net MVC View usando Razor, in questo modo:

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

Il problema è che nell’output il JSON è codificato e al mio browser non piace. Per esempio:

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

Come faccio a far sì che Razor emetta un JSON non codificato?

Tu fai:

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

Nelle versioni precedenti alla Beta 2 è stato come:

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

JsonConvert.SerializeObject di JsonConvert.SerializeObject non si comporta come Json.Encode e fa ciò che @ david-k-egghead suggerisce ti apre agli attacchi XSS .

Rilascia questo codice in una visualizzazione Razor per vedere che l’uso di Json.Encode è sicuro e che Newtonsoft può essere reso sicuro nel contesto JavaScript, ma non senza un lavoro extra.

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

Guarda anche:

  • L’output di JsonConvert.SerializeObject deve essere codificato in Razor view?
  • Regole di prevenzione XSS

Utilizzando Newtonsoft