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

Yve*_*ves 27 asp.net-mvc asp.net-core-mvc

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

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

Yve*_*ves 42

经过一番搜索,发现它:

@inject IJsonHelper Json;
@Json.Serialize(...)
Run Code Online (Sandbox Code Playgroud)

  • 我不知道这是否已经改变,但是使用 ASP.Net Core 2.1,我不需要注入 Json。它只是已经在那里 (3认同)

Cud*_*nny 15

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

@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(myObj) as String)
Run Code Online (Sandbox Code Playgroud)

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


Kev*_*ist 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>
Run Code Online (Sandbox Code Playgroud)

将呈现为

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

要正确地将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>
Run Code Online (Sandbox Code Playgroud)

呈现为:

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

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