MVC 6中的@Json.Encode或@Json.Decode方法在哪里?

时间:2015-05-18 11:25:07

标签: asp.net-mvc asp.net-core-mvc

MVC6中MVC5的@Json.Encode方法的等价物是什么?在MVC5中,我们可以在视图中访问这些方法。但我找不到任何可以从MVC 6视图中访问的方法。

如果MVC6中已有内置功能,我不想编写辅助方法。

3 个答案:

答案 0 :(得分:39)

经过一番搜索,找到了它:

@inject IJsonHelper Json;
@Json.Serialize(...)

答案 1 :(得分:13)

我在以下方面取得了成功:

Sub msgAlert()

MsgBox "First Response Time (hours)= " & _ 
 Worksheets("Parsing").Range("H21").Value & _
 vbCrLf & "Investigation Time (hours)= " & _
 Worksheets("Parsing").Range("I21").Value & _
 Format(dTotalArea, "&#,##0")

End Sub

我不确定Json.Encode是否已成功,因为它是System.Web的一部分,现在已经消失了。

答案 2 :(得分:5)

@Json.Encode()的一个功能是对JSON字符串中的实体进行自动HTML编码,这有助于避免XSS漏洞。 JsonHelper类现在基于Json.NET序列化,如果配置正确,它至少支持一些(或全部)相同的功能。如果不受信任的数据被序列化,其他解决方案可能容易受到XSS攻击。

漏洞的快速示例:

<script>
    window.something = @Json.Serialize(new { someprop = "Hello</script><script>alert('xss')</script><script>" });
</script>

将呈现为

<script>
    window.something = {"someprop":"Hello
</script>
<script>alert('xss')</script>
<script>"};</script>

要正确配置Json.NET以转义HTML实体,可以使用@Json.Serialize(object, serializerSettings)重载并将StringEscapeHandling覆盖为EscapeHTML。可以在辅助类中定义或注入设置。

@using Newtonsoft.Json
<script>
    @{
        var settings = new JsonSerializerSettings {StringEscapeHandling = StringEscapeHandling.EscapeHtml};
    }
    window.something = @Json.Serialize(new { someprop = "Hello</script><script>alert('xss')</script><script>" }, settings);
</script>

将其呈现为:

<script>
    window.something = {"someprop":"Hello\u003c/script\u003e\u003cscript\u003ealert(\u0027xss\u0027)\u003c/script\u003e\u003cscript\u003e"};
</script>

可以在此处找到一些将数据安全地序列化到ASP.NET Core中的页面的其他方法:https://github.com/aspnet/Docs/blob/master/aspnetcore/security/cross-site-scripting.md