ASP.NET Tips #003 - ASP.NET Core でビューのレンダリング時にマルチバイト文字を HTML エンコードさせない

ASP.NET Core MVC では、 Razor 構文を用いて Model/ViewBag/ViewData などの値( Unicode 文字)をビューに埋め込むとマルチバイト文字を HTML エンコードしてくれますが、「ページのソースを表示」で人間が読むには可読性が悪くてデバッグしにくいです。

今回は Home/Index ビューの ViewData["Title"] を「ホーム:ABCあいうえおdef漢字123GHI」に変えて、全角文字をテストします。

~/Views/Home/Index.cshtml
@{
	ViewData["Title"] = "ホーム:ABCあいうえおdef漢字123GHI";
}

<div class="text-center">
	<h1 class="display-4">Welcome</h1>
	<p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
	<hr />
	<p>@(ViewData["Title"])</p>
</div>
実行時のテキスト表示
ソースを表示 (マルチバイト文字がHTMLエンコードされた場合)

ビューのレンダリング時にマルチバイト文字を HTML エンコードさせたくない場合は、 Startup.cs の ConfigureServices() 内で AddWebEncoders() のオプションで TextEncoderSettings を UnicodeRanges.All に設定します。

~/Startup.cs
using System.Text.Encodings.Web;
using System.Text.Unicode;

namespace AspNetTips.MvcSite
{
	public class Startup
	{
		public Startup(IConfiguration configuration)
		{
			Configuration = configuration;
		}
		
		public IConfiguration Configuration { get; }
		
		public void ConfigureServices(IServiceCollection services)
		{
			// ビューのレンダリング時にマルチバイト文字をHTMLエンコードさせない
			services.AddWebEncoders(options => options.TextEncoderSettings = new TextEncoderSettings(UnicodeRanges.All));
			
			services.AddControllersWithViews();
		}
		
		public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
		{
			// 省略...
		}
	}
}

これで実行時にエンコードされていた全角文字がそのまま表示されます。

ソースを表示 (マルチバイト文字をHTMLエンコードさせない場合)
試作環境
  • Windows 10 (20H2)
  • Visual Studio 2019 (v16.8.3)
  • .NET SDK 5.0.101
  • ASP.NET Core 5.0 / MVC