如何全局设置自定义 HtmlEncoder 以在所有 Razor 页面中使用?

How can I globally set a custom HtmlEncoder to use in all Razor pages?

我想将自定义 HtmlEncoder 设置为要在 Asp.net Core Razor 页面中使用的默认 HtmlEncoder

RazorPageBase class 确实有一个 HtmlEncoder 属性,我可以像这样在单个 Razor 页面上设置它:

using System.Text.Encodings.Web;
using System.Text.Unicode;
@{
    HtmlEncoder = HtmlEncoder.Create(UnicodeRanges.All);
}

然后在该页面上使用 HtmlEncoder

现在最明显的尝试是将此代码应用于 'ViewStart.cshtml':

using System.Text.Encodings.Web;
using System.Text.Unicode;
@{
    Layout = "_Layout";
    HtmlEncoder = HtmlEncoder.Create(UnicodeRanges.All);
}

但是,这不起作用,它仍然使用默认值 HtmlEncoder(它编译得很好,它确实选择了布局 属性)。

这意味着,要为所有页面设置默认 HtmlEncoder,我必须将上面的代码包含到每个 Razor 页面,包括每个部分页面,当然还有“_Layout.cshtml".

我希望我错过了什么。

如何在全球范围内指定它以便它适用于所有 Razor 页面?

在您的应用配置中,执行以下操作:

[.NET 6 Program.cs]
builder.Services.Configure<WebEncoderOptions>(options =>
{
    options.TextEncoderSettings = new TextEncoderSettings(UnicodeRanges.All);
});

或者

[Pre-.NET 6 Startup.cs]
services.Configure<WebEncoderOptions>(options =>
{
    options.TextEncoderSettings = new TextEncoderSettings(UnicodeRanges.All);
});