.Net Core 1.1 中 HttpUtility.JavaScriptStringEncode 的等价物在哪里?

Posted

技术标签:

【中文标题】.Net Core 1.1 中 HttpUtility.JavaScriptStringEncode 的等价物在哪里?【英文标题】:Where is the equivalent of HttpUtility.JavaScriptStringEncode in .Net Core 1.1? 【发布时间】:2017-03-11 06:40:42 【问题描述】:

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

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

但是,我无法在 .net 核心中找到等效项。

【问题讨论】:

你可以通过它的父母调用它来使用相同的方法:@System.Web.HttpUtility.JavaScriptStringEncode(YourStringHere) 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

在视图中有一个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

我还没有找到比您自己的助手更好的方法,而无需通过 Startup 中的 json 选项强制默认的 JsonOutputFormatter 以这种方式运行:

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

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

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

【讨论】:

【参考方案3】:

你可以使用同样的方法,像剃刀上的这个例子一样使用它:

@System.Web.HttpUtility.JavaScriptStringEncode(YourStringHere)

更新:

正如@Dai 所说,这只有在你的目标是 .NET Framework 时才有效,而 ASP.NET Core 不鼓励使用它。

【讨论】:

这在 .NET Core 中不起作用,因为 System.Web.dll 不可用。如果您的目标是 .NET Framework 而不是 .NET Core,并且您的项目引用 System.Web.dll(不鼓励使用 ASP.NET Core),这仅适用于 ASP.NET Core。 这在最新的核心版本中完美运行

以上是关于.Net Core 1.1 中 HttpUtility.JavaScriptStringEncode 的等价物在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

.Net Core 1.1 中的传递引用

Asp.Net Core 1.1 消费web api

在 .NET Core 1.1 中获取应用程序数据目录的跨平台方式

非托管代码中的 ASP Net Core 1.1 和 EF 6 异常?

.net core 1.1 中的嵌套包含

.NET Core 1.1日期解析无APiSQL Server数据转换JSON