2016-05-26 14 views
2

RC1では、以下の小さなメソッドが動作しました。asp.netコア1.0 mvc RC2 tagBuilderメソッド(RC1で動作していない)RC1

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

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

     return writer.ToString(); 
    } 

このメソッドは、stringWriter()を使用してTagbuilderタグを文字列に変換する方法を示しています。

私は「新しいHtmlEncoder()」のエラーを取得し、エラーがあるのです:私は上thisを見つけ

抽象クラスやインタフェースのインスタンスを作成できません「HtmlEncoder」 Asp.Net/Announcementsの破断変化セクションでHtmlEncoderしかし、私は仕事にそれを変更する方法を見つけ出すカント..

どのようにリファクタリングすることができます

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

私はタグを文字列に変換できますか?

答えて

3

HtmlEncoderは、現在抽象クラスであり、初期化できません(dotnet\corefx GitHub repositorysee HttpEncoder.cs)。

デフォルトの実装(DefaultHtmlEncoder)が内部にあります。しかしHtmlEncoderは、そのデフォルト実装への参照を持つ静的プロパティDefaultを公開します。see HttpEncoder.cs

new HtmlEncoder()の代わりにHtmlEncoder.Defaultを呼び出してください。私はそれがHtmlEncoderが要求ごとに複数回初期化されることを避ける最適化の試みだと思います。

+0

これは正しい答えだと思うが、私はそれを実装する際にいくつかの問題を抱えている。上記の簡単な方法を使って例を挙げることは可能ですか?私は間違いなく私のオリジナルの答えを[ここ](http://stackoverflow.com/questions/33667308/convert-ihtmlcontent-tagbuilder-to-string-in-c-sharp)、特に@Phasiqの答えを得ました。 – si2030

+1

申し訳ありませんが深夜だったし、タイプがありました。 'HtmlEncoder.Default'はあなたが呼ぶものです。つまり、デフォルト実装を使用する 'Tag.WriteTo(writer、HtmlEncoder.Default);' – Tseng

3

アクティブ(構成済み)HtmlEncoderインスタンスを取得するために依存性注入を使用します。

エンコーダは、一部のユニコード文字(キリル文字など)をエンコードしないように設定することができます(Startup)。 encodes everything except UnicodeRanges.BasicLatinです。

+0

コンストラクタを介してのみ設定を渡すことができ、 'DefaultHtmlEncoder'は内部シールされています。他のどのクラスが 'HttpEncoder'抽象クラスを実装していますか?昨日、単体テストに関連するクラスしか見つけられませんでした。 – Tseng

+0

はい、 'DefaultHtmlEncoder'は'内部封印 'ですが、' HtmlEncoder'自体ではありません。 'Startup.cs'のDIを使ってデフォルトのものを自分の実装に置き換えることができます。さらに、['public static HtmlEncoder.Create'](https://github.com/dotnet/corefx/blob/release/1.0.0/src/System.Text.Encodings.Web/src/System/Text/Encodings/ Web/HtmlEncoder.cs#L31)では、新しい 'DefaultHtmlEncoder'インスタンスをカスタム' TextEncoderSettings'で作成することができます – Dmitry

関連する問題