.NET Core(MVC6)でHTML文字をデコードする必要があります。 .NET Coreには、以前は誰もがその目的で使用していたWebUtility.HtmlDecode関数がないようです。 .NET Coreに代替品はありますか?
これはSystem.Net.WebUtility
クラスにあります:
//
// Summary:
// Provides methods for encoding and decoding URLs when processing Web requests.
public static class WebUtility
{
public static string HtmlDecode(string value);
public static string HtmlEncode(string value);
public static string UrlDecode(string encodedValue);
public static byte[] UrlDecodeToBytes(byte[] encodedValue, int offset, int count);
public static string UrlEncode(string value);
public static byte[] UrlEncodeToBytes(byte[] value, int offset, int count);
}
これはNet Core 2.0にあります
using System.Text.Encodings.Web;
そしてそれを呼び出す:
$"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(link)}'>clicking here</a>.");
UPDATE:.Net Core 2.1でも:
using System.Web;
HttpUtility.UrlEncode(code)
HttpUtility.UrlDecode(code)
WebUtilityライブラリのHtmlDecode関数が機能することがわかりました。
System.Net.WebUtility.HtmlDecode(string)
参照System.Net.WebUtility
を追加する必要があります。
既に.Net Core 2に含まれています(Microsoft.AspNetCore.All
)
または、 NuGet -.Net Core 1のプレビューバージョンからインストールできます。
たとえば、コードは次のようになります
public static string HtmlDecode(this string value)
{
value = System.Net.WebUtility.HtmlDecode(value);
return value;
}
namespace System.Web
{
//
// Summary:
// Provides methods for encoding and decoding URLs when processing Web requests.
// This class cannot be inherited.
public sealed class HttpUtility
{
public HttpUtility();
public static string HtmlAttributeEncode(string s);
public static void HtmlAttributeEncode(string s, TextWriter output);
public static string HtmlDecode(string s);
public static void HtmlDecode(string s, TextWriter output);
public static string HtmlEncode(string s);
public static string HtmlEncode(object value);
public static void HtmlEncode(string s, TextWriter output);
public static string JavaScriptStringEncode(string value);
public static string JavaScriptStringEncode(string value, bool addDoubleQuotes);
public static NameValueCollection ParseQueryString(string query);
public static NameValueCollection ParseQueryString(string query, Encoding encoding);
public static string UrlDecode(string str, Encoding e);
public static string UrlDecode(byte[] bytes, int offset, int count, Encoding e);
public static string UrlDecode(string str);
public static string UrlDecode(byte[] bytes, Encoding e);
public static byte[] UrlDecodeToBytes(byte[] bytes, int offset, int count);
public static byte[] UrlDecodeToBytes(string str, Encoding e);
public static byte[] UrlDecodeToBytes(byte[] bytes);
public static byte[] UrlDecodeToBytes(string str);
public static string UrlEncode(string str);
public static string UrlEncode(string str, Encoding e);
public static string UrlEncode(byte[] bytes);
public static string UrlEncode(byte[] bytes, int offset, int count);
public static byte[] UrlEncodeToBytes(string str);
public static byte[] UrlEncodeToBytes(byte[] bytes);
public static byte[] UrlEncodeToBytes(string str, Encoding e);
public static byte[] UrlEncodeToBytes(byte[] bytes, int offset, int count);
[Obsolete("This method produces non-standards-compliant output and has interoperability issues. The preferred alternative is UrlEncode(String).")]
public static string UrlEncodeUnicode(string str);
[Obsolete("This method produces non-standards-compliant output and has interoperability issues. The preferred alternative is UrlEncodeToBytes(String).")]
public static byte[] UrlEncodeUnicodeToBytes(string str);
public static string UrlPathEncode(string str);
}
}
デコードまたはエンコードに.net core
のHttpUtility
クラスを使用できます。
それがうまくいくことを願っています。
それは答えではありませんが、そのような種類の問題を解決する方法のヒントです。 ReSharper 。を使用している場合にのみ役立ちます
.NET Coreアプリでの開発を開始し、通常のクラスが配置されているパッケージの名前がわからないなど、多くの問題に遭遇しました。 ReShareperには、これを解決する優れた機能があります。
詳細については、次の記事を参照してください- NuGetパッケージの検索、調査、およびインストール 。この機能により、時間を大幅に節約できました。
EDIT:Visual Studio 2017には同様の機能があるため、ReSharperは必要ありません- Visual Studio 2017は、不明なタイプのNuGetパッケージを自動的に推奨できます。
HtmlDecode
およびほとんどの*Decode
メソッドはCoreFxに移植されていません。 *Encode
メソッドのみが利用可能です。
今日利用できるものは次のとおりです: https://github.com/dotnet/corefx/blob/1dfe38aeb2811fbbd6d4de36d210f060e80d50a6/src/System.Text.Encodings.Web/src/System/Text/Encodings/Web/ HtmlEncoder.cs