TagHelper に指定された属性をエンコードする

HttpUtility があるけど古の腐ったタレっぽい気がするので、何か新しいやり方があるんじゃないかと。だが調べても出てこなかった。

結論から書くと TagHelper でも DI 使えるので、IHtmlGenerator を引数に取って使います。書いといてくださいよ…。

[HtmlTargetElement ("image")]
public sealed class ImageTagHelper
{
    #region HIDDEN

    reaedonly IHtmlGenerator _Generator;

    #endregion

    public string Url { get; set; }
    public string Description { get; set; }

    public ImageTagHelper (IHtmlGenerator generator)
    {
        _Generator = generator;
    }
    public override void Process (TagHelperContext context, TagHelperOutput output)
    {
        output.TagName = "img";
        output.Attributes.SetAttribute ("src", _Generator.Encode (Url));
        output.Attributes.SetAttribute ("alt", _Generator.Encode (Description));
    }
}

これで、

@{
    var url = " /><p>Hello, World!</p>"; // ユーザー入力から来る値
    <image url="@url" description="気持ちよくさせねーよ" />
}

こういう悪戯に対処できます。