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="気持ちよくさせねーよ" /> }
こういう悪戯に対処できます。