2017-03-11 14 views
7

Znalazłem się w potrzebie szorowania javascript z komentarzy dodawanych przez użytkowników w aplikacji .NET Core MVC. W poprzednich frameworkach można to osiągnąć, przekazując najpierw łańcuch znaków do JavaScriptStringEncode.Gdzie jest odpowiednik HttpUtility.JavaScriptStringEncode w .Net Core 1.1?

var comment = HttpUtility.JavaScriptStringEncode(model.Comment); 

Jednak nie byłem w stanie znaleźć odpowiednika w rdzeniu .net.

Odpowiedz

4

W widokach dostępny jest helper dostępny jako @Json.Serialize. Który wykorzystuje Json.NET, biorąc pod uwagę wszelkie opcje formatowania skonfigurowane w Startup.cs:

var foo = @Json.Serialize(model); 

Miej na uwadze to nie XSS-sanitizes JSON domyślnie! Jednakże można użyć przeciążenie, które pozwala zrobić, że określenie opcji Json.NET StringEscapeHandling jak EscapeHtml:

@using Newtonsoft.Json 

... 

var foo = @Json.Serialize(model, new JsonSerializerSettings { StringEscapeHandling = StringEscapeHandling.EscapeHtml }); 

Można owinąć że może do własnego pomocnika jak @Json.SafeSerialize lub @SafeJson.Serialize.

Nie znalazłem lepszy sposób niż własnych pomocników bez wymuszania domyślnego JsonOutputFormatter zachowywać się w ten sposób przez opcje json przy starcie:

services.AddMvc().AddJsonOptions(opts => opts.SerializerSettings.StringEscapeHandling = StringEscapeHandling.EscapeHtml) 

Problem z tym drugim podejściu (i dlaczego to polubisz preferowany niestandardowy helper) jest to, że wpłynie to również na JSON-y zwrócone przez API.

PS. Podniosłem to na github.

7

tu jest ekwiwalentem HttpUtility.JavaScriptStringEncode w rdzeniu NET:

using System.Text.Encodings.Web; //part of System.Text.Encodings.Web nuget package 
... 

var encodedText = JavaScriptEncoder.Default.Encode("TextToEncode");