I want to add the integrity
attribute to a script tag in my tag helper. It contains a +
sign which I don't want encoded.
<script integrity="sha384-Li9vy3DqF8tnTXuiaAJuML3ky+er10rcgNR/VqsVpcw+ThHmYcwiB1pbOxEbzJr7"></script>
This is my tag helper:
[HtmlTargetElement(Attributes = "script")]
public class MyTagHelper : TagHelper
{
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
// Omitted...
output.Attributes["integrity"] = "sha384-Li9vy3DqF8tnTXuiaAJuML3ky+er10rcgNR/VqsVpcw+ThHmYcwiB1pbOxEbzJr7";
}
}
This is the output of the above code, where +
has been replaced by +
:
<script integrity="sha384-Li9vy3DqF8tnTXuiaAJuML3ky+er10rcgNR/VqsVpcw+ThHmYcwiB1pbOxEbzJr7"></script>
How can I stop this encoding from taking place?
The provided code didn't work for me, as the
ProcessAsync
method wasn't called. There were some things wrong with this (abstract class can't be instantiated, there is noscript
attribute etc.).The solution is basically that you create the
TagHelperAttribute
class yourself, instead of simply assigning thestring
type.The tag helper
This correctly outputs
The reason for this is, that
TagHelperAttribute
has an operator overloadpublic static implicit operator TagHelperAttribute(string value)
for the implicit (=
) operator, which will create theTagHelperAttribute
and pass the string as it'sValue
.In Razor,
string
s get escaped automatically. If you want to avoid the escaping, you have to useHtmlString
instead.