This repository was archived by the owner on Dec 19, 2018. It is now read-only.
This repository was archived by the owner on Dec 19, 2018. It is now read-only.
Option to bypass GetContent HTML encoding in TagHelper #643
Closed
Description
The current implementation of TagHelperContent.GetContent
automatically HTML encodes when called from within the TagHelper
implementation. Using Dave Paquette's implementation of Markdown Taghelper
, I am able to reproduce the unexpected behavior of premature encoding.
Implementation
[HtmlTargetElement("p", Attributes = "markdown")]
[HtmlTargetElement("markdown")]
[OutputElementHint("p")]
public class MarkdownTagHelper : TagHelper
{
public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
if (output.TagName == "markdown")
{
output.TagName = "p";
}
var childContent = await context.GetChildContentAsync();
// This call to get markdownContent is HTML encoded
// prematurely and strips meaningful newline characters
// necessary for the markdown output
var markdownContent = childContent.GetContent();
var markdown = new MarkdownSharp.Markdown();
var htmlContent = markdown.Transform(markdownContent);
output.Content.SetContentEncoded(htmlContent);
}
}
Input
### Features\r\n\r\n* API namespace cleanup for tag helpers ([#578](https://github.com/aspnet/Razor/issues/578))\r\n* Refactor WriteAttribute API surface. ([#177](https://github.com/aspnet/Razor/issues/177))\r\n\r\n### Bugs Fixed\r\n\r\n* Multiple TagHelpers targeting same element cannot effectively communicate to children. ([#571](https://github.com/aspnet/Razor/issues/571))\r\n* Compilation error within tag attribute shows generated code instead of markup ([#569](https://github.com/aspnet/Razor/issues/569))\r\n* Specifying `RestrictChildren` and empty `HtmlTargetElement` results in an error ([#562](https://github.com/aspnet/Razor/issues/562))\r\n* `TreeStructureChanged` marked as `true` when whitespace is added to a page with `TagHelper`s ([#553](https://github.com/aspnet/Razor/issues/553))\r\n* Expose `FilePath` on `MappingLocation` to let Razor editor know mapping origination. ([#552](https://github.com/aspnet/Razor/issues/552))\r\n\r\n
Expected
Actual
Proposed Solution
I expect to be able to pull the exact contents of the tag element, even if there is content that is potentially unsafe at runtime. The responsibility of HTML encoding should be left up to the TagHelper
developer.
http://www.khalidabuhakmeh.com/asp-net-5-mvc-6-taghelpers-and-the-cake