Próbuję napisać obiekt jako JSON do mojego widoku Asp.Net MVC przy użyciu Razor, na przykład:
<script type="text/javascript">
var potentialAttendees = @Json.Encode(Model.PotentialAttendees);
</script>
Problem polega na tym, że w danych wyjściowych kodowany jest JSON, a mojej przeglądarce się to nie podoba. Na przykład:
<script type="text/javascript">
var potentialAttendees = [{"Name":"Samuel Jack"},];
</script>
Jak sprawić, by Razor emitował niezakodowane JSON?
asp.net-mvc
json
razor
Samuel Jack
źródło
źródło
javascriptserializer
do tego@Html.Raw(javascriptSerializerObjecct.Serialize(myObject))
Newtonsoft
JsonConvert.SerializeObject
nie zachowuje się tak samo,Json.Encode
a zrobienie tego, co sugeruje @ david-k-egghead, otwiera cię na ataki XSS .Upuść ten kod do widoku Razor, aby zobaczyć, że używanie
Json.Encode
jest bezpieczne i że Newtonsoft można zabezpieczyć w kontekście JavaScript, ale nie jest to bez dodatkowej pracy.Zobacz też:
źródło
Json.Encode
istnieje, odkąd pamiętam, ale wadą jest to, że wykorzystuje implementację firmy Microsoft, która generuje niestandardowe daty (i może robić inne uciążliwe rzeczy). Używam i zachęcam do korzystania z Newtonsoft wJsonConvert.SerializeObject
połączeniu z odpowiednim ucieczką, ponieważ ma lepsze wyjście.Korzystanie z Newtonsoft
źródło
JsonSerializerSettings.StringEscapeHandling
aby włączyć kodowanie. stackoverflow.com/a/50336590/6950124