Я пытаюсь записать объект как JSON в свой Asp.Net MVC View, используя Razor, например:
<script type="text/javascript">
var potentialAttendees = @Json.Encode(Model.PotentialAttendees);
</script>
Проблема в том, что в выводе кодируется JSON, а моему браузеру это не нравится. Например:
<script type="text/javascript">
var potentialAttendees = [{"Name":"Samuel Jack"},];
</script>
Как мне заставить Razor выдавать незашифрованный JSON?
asp.net-mvc
json
razor
Сэмюэл Джек
источник
источник
javascriptserializer
для этого, как@Html.Raw(javascriptSerializerObjecct.Serialize(myObject))
Ньютонсофт
JsonConvert.SerializeObject
ведет себя не так, какJson.Encode
и делает то, что предлагает @ david-k-egghead, открывает вам возможность атак XSS .Перенесите этот код в представление Razor, чтобы увидеть, что использование
Json.Encode
безопасно, и что Newtonsoft можно сделать безопасным в контексте JavaScript, но это не обходится без дополнительной работы.Смотрите также:
источник
Json.Encode
Насколько я помню, он существует примерно столько же, сколько недостаток в том, что он использует реализацию Microsoft, которая выводит нестандартные даты (и может делать другие неприятные вещи). Я использую и поощряю использование Newtonsoft вJsonConvert.SerializeObject
сочетании с правильным побегом, потому что он имеет лучший выход.Использование Newtonsoft
источник
JsonSerializerSettings.StringEscapeHandling
чтобы включить кодирование. stackoverflow.com/a/50336590/6950124