ASP.NET Core MVC では、 Razor 構文を用いて Model/ViewBag/ViewData などの値( Unicode 文字)をビューに埋め込むとマルチバイト文字を HTML エンコードしてくれますが、「ページのソースを表示」で人間が読むには可読性が悪くてデバッグしにくいです。
今回は Home/Index ビューの ViewData["Title"] を「ホーム:ABCあいうえおdef漢字123GHI」に変えて、全角文字をテストします。
@{
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 エンコードさせたくない場合は、 Startup.cs の ConfigureServices() 内で AddWebEncoders() のオプションで TextEncoderSettings を UnicodeRanges.All に設定します。
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)
{
// 省略...
}
}
}
これで実行時にエンコードされていた全角文字がそのまま表示されます。
試作環境
- Windows 10 (20H2)
- Visual Studio 2019 (v16.8.3)
- .NET SDK 5.0.101
- ASP.NET Core 5.0 / MVC