簡體   English   中英

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

[英]Where is the equivalent of HttpUtility.JavaScriptStringEncode in .Net Core 1.1?

我發現自己需要從用戶在 .Net Core MVC 應用程序中添加的評論中清除 javascript。 在以前的框架中,這可以通過首先將您的字符串傳遞到 JavaScriptStringEncode 來實現。

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

但是,我一直無法在 .net core 中找到等價物。

這是 .net 核心中HttpUtility.JavaScriptStringEncode的等效項:

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

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

視圖中有一個可用作@Json.Serialize助手 使用 JSON.Net,考慮到在 Startup.cs 中配置的任何格式選項:

var foo = @Json.Serialize(model);

請記住,默認情況下不會對 json 進行 XSS 清理 但是,您可以使用重載來執行此操作,將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。

附注。 我在github上提出了這個。

您可以使用相同的方法,像剃刀上的這個例子一樣使用它:

@System.Web.HttpUtility.JavaScriptStringEncode(YourStringHere)

更新:

正如@Dai 所說,這只適用於 .NET Framework,而 ASP.NET Core 不鼓勵它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM