如何使用Razor將未編碼的Json寫入我的我正在嘗試使用Razor將對象作為JSON編寫到我的Asp.Net MVC View中,如下所示:<script type="text/javascript">
var potentialAttendees = @Json.Encode(Model.PotentialAttendees);</script>問題是在輸出中JSON被編碼,我的瀏覽器不喜歡它。例如:<script type="text/javascript">
var potentialAttendees = [{"Name":"Samuel Jack"},];</script>如何讓Razor發(fā)出未編碼的JSON?
3 回答

慕婉清6462132
TA貢獻1804條經(jīng)驗 獲得超2個贊
你做:
@Html.Raw(Json.Encode(Model.PotentialAttendees))
在早于Beta 2的版本中,您可以這樣做:
@(new HtmlString(Json.Encode(Model.PotentialAttendees)))

尚方寶劍之說
TA貢獻1788條經(jīng)驗 獲得超4個贊
Newtonsoft的JsonConvert.SerializeObject
表現(xiàn)與Json.Encode
@ david-k-egghead建議的行為不同,并且可以讓你接受XSS攻擊。
將此代碼放入Razor視圖中以查看使用Json.Encode
是否安全,并且可以在JavaScript上下文中使Newtonsoft安全,但不是沒有額外的工作。
<script> var jsonEncodePotentialAttendees = @Html.Raw(Json.Encode( new[] { new { Name = "Samuel Jack</script><script>alert('jsonEncodePotentialAttendees failed XSS test')</script>" } } )); alert('jsonEncodePotentialAttendees passed XSS test: ' + jsonEncodePotentialAttendees[0].Name);</script><script> var safeNewtonsoftPotentialAttendees = JSON.parse(@Html.Raw(HttpUtility.JavaScriptStringEncode(JsonConvert.SerializeObject( new[] { new { Name = "Samuel Jack</script><script>alert('safeNewtonsoftPotentialAttendees failed XSS test')</script>" } }), addDoubleQuotes: true))); alert('safeNewtonsoftPotentialAttendees passed XSS test: ' + safeNewtonsoftPotentialAttendees[0].Name);</script><script> var unsafeNewtonsoftPotentialAttendees = @Html.Raw(JsonConvert.SerializeObject( new[] { new { Name = "Samuel Jack</script><script>alert('unsafeNewtonsoftPotentialAttendees failed XSS test')</script>" } })); alert('unsafeNewtonsoftPotentialAttendees passed XSS test: ' + unsafeNewtonsoftPotentialAttendees[0].Name);</script>

哈士奇WWW
TA貢獻1799條經(jīng)驗 獲得超6個贊
使用Newtonsoft
<script type="text/jscript"> var potentialAttendees = @(Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model.PotentialAttendees)))</script>
- 3 回答
- 0 關(guān)注
- 603 瀏覽
添加回答
舉報
0/150
提交
取消