.Net Core 1.1中的HttpUtility.JavaScriptStringEncode等效于哪里?

时间:2017-03-11 06:40:42

标签: javascript asp.net-core-mvc

我发现自己需要使用.Net Core MVC应用程序中的用户添加的评论来清除javascript。在以前的框架中,这可以通过首先将您的字符串传递给JavaScriptStringEncode来实现。

Intent origIntent = getIntent().getParcelableExtra(EXTRA_ORIGINAL_INTENT);
Intent redirectIntent = new Intent(origIntent); // copy ...
redirectIntent.setClass(this, SomeActivity.class); // ... explicit now
finish();
startActivity(redirectIntent);

但是,我还没能找到.net核心中的等价物。

3 个答案:

答案 0 :(得分:13)

以下是.net核心中的HttpUtility.JavaScriptStringEncode的等价物:

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

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

答案 1 :(得分:4)

视图中有一个helper可用@Json.Serialize。它使用JSON.Net,考虑在Startup.cs中配置的任何格式选项:

var foo = @Json.Serialize(model);

请记住,默认情况下不会对json进行XSS消毒!但是,您可以使用重载来执行此操作,将JSON.Net的StringEscapeHandling选项指定为EscapeHtml

@using Newtonsoft.Json

...

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

您可以将其包装到自己的帮助程序中,例如@Json.SafeSerialize@SafeJson.Serialize

我没有找到比你自己的助手更好的方法,而没有强迫默认的JsonOutputFormatter以这种方式通过Startup中的json选项来表现:

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

后一种方法的问题(以及您可能更喜欢自定义帮助程序的原因)是它也会影响从API返回的JSON。

PS。我在github上提出了这个问题。

答案 2 :(得分:2)

您可以使用相同的方法,如剃刀上的示例所示使用它:

@System.Web.HttpUtility.JavaScriptStringEncode(YourStringHere)