asp.net核心1.0 mvc RC2 tagBuilder方法与HtmlEncoder()工作RC1不工作RC2

时间:2016-05-26 01:35:24

标签: asp.net-core asp.net-core-mvc

在RC1中,我使用了以下小方法。

    public string ConvertTagToSring(TagBuilder Tag)
    {
        var writer = new StringWriter();

        Tag.WriteTo(writer, new HtmlEncoder());

        return writer.ToString();
    }

该方法显示它使用stringWriter()将Tagbuilder标记转换为字符串。

我在"新的HtmlEncoder()"上收到错误错误是:

  

无法创建抽象类或界面的实例' HtmlEncoder'

我在Asp.Net/Announcements的重大更改部分找到了HtmlEncoder上的this但是我无法弄清楚如何将其更改为有效..

我如何重构:

Tag.WriteTo(writer, new HtmlEncoder());

这样我就可以将标签转换为字符串了吗?

2 个答案:

答案 0 :(得分:3)

HtmlEncoder现在是一个抽象类,无法初始化(see HttpEncoder.cs上的dotnet\corefx GitHub repository)。

它有一个默认的实现(DefaultHtmlEncoder),它是内部的。但是HtmlEncoder公开了一个静态属性Default,它引用了它的默认实现see HttpEncoder.cs

因此,您只需致电new HtmlEncoder(),而不是致电HtmlEncoder.Default。我想这是一次优化尝试,以避免每次请求多次HtmlEncoder初始化。

答案 1 :(得分:3)

使用依赖注入来获取活动(已配置)HtmlEncoder实例。

可以配置编码器(在Startup中)不对某些unicode字符(西里尔语等)进行编码,而DefaultHtmlEncoder.Singleton encodes everything except UnicodeRanges.BasicLatin