Ich versuche, ein Objekt als JSON mit Razor in meine Asp.Net MVC-Ansicht zu schreiben:
<script type="text/javascript">
var potentialAttendees = @Json.Encode(Model.PotentialAttendees);
</script>
Das Problem ist, dass in der Ausgabe der JSON codiert ist und mein Browser ihn nicht mag. Beispielsweise:
<script type="text/javascript">
var potentialAttendees = [{"Name":"Samuel Jack"},];
</script>
Wie bringe ich Razor dazu, nicht codierten JSON auszugeben?
asp.net-mvc
json
razor
Samuel Jack
quelle
quelle
javascriptserializer
für das wie verwenden@Html.Raw(javascriptSerializerObjecct.Serialize(myObject))
Newtonsofts
JsonConvert.SerializeObject
verhält sich nicht so wieJson.Encode
und wenn Sie das tun, was @ david-k-egghead vorschlägt, sind Sie für XSS-Angriffe geöffnet .Legen Sie diesen Code in einer Razor-Ansicht ab, um zu sehen, dass die Verwendung
Json.Encode
sicher ist und dass Newtonsoft im JavaScript-Kontext sicher gemacht werden kann, jedoch nicht ohne zusätzliche Arbeit.Siehe auch:
quelle
Json.Encode
Es gibt es schon so lange, wie ich mich erinnern kann, aber der Nachteil ist, dass es die Implementierung von Microsoft verwendet, die nicht standardmäßige Daten ausgibt (und möglicherweise andere störende Dinge tut). Ich benutze und ermutige die Verwendung von Newtonsoft inJsonConvert.SerializeObject
Kombination mit der richtigen Flucht, weil es eine bessere Ausgabe hat.Verwenden von Newtonsoft
quelle
JsonSerializerSettings.StringEscapeHandling
, um die Codierung zu aktivieren. stackoverflow.com/a/50336590/6950124