Muh*_*eed 1 asp.net razor asp.net-core-mvc tag-helpers asp.net-core
我想将该integrity属性添加到我的标签助手中的脚本标签中。它包含一个+我不想编码的标志。
<script integrity="sha384-Li9vy3DqF8tnTXuiaAJuML3ky+er10rcgNR/VqsVpcw+ThHmYcwiB1pbOxEbzJr7"></script>
Run Code Online (Sandbox Code Playgroud)
这是我的标签助手:
[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";
}
}
Run Code Online (Sandbox Code Playgroud)
这是上述代码的输出,其中+已替换为+:
<script integrity="sha384-Li9vy3DqF8tnTXuiaAJuML3ky+er10rcgNR/VqsVpcw+ThHmYcwiB1pbOxEbzJr7"></script>
Run Code Online (Sandbox Code Playgroud)
我怎样才能阻止这种编码的发生?
提供的代码对我不起作用,因为ProcessAsync没有调用该方法。这有一些问题(抽象类无法实例化,没有script属性等)。
解决方案基本上是您TagHelperAttribute自己创建类,而不是简单地分配string类型。
@section Scripts {
<script></script>
}
Run Code Online (Sandbox Code Playgroud)
标签助手
[HtmlTargetElement("script")]
public class MyTagHelper : TagHelper
{
public const string IntegrityAttributeName = "integrity";
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
// Omitted...
output.Attributes[IntegrityAttributeName] = new TagHelperAttribute(IntegrityAttributeName, new HtmlString("sha384-Li9vy3DqF8tnTXuiaAJuML3ky+er10rcgNR/VqsVpcw+ThHmYcwiB1pbOxEbzJr7"));
await Task.FromResult(true);
}
}
Run Code Online (Sandbox Code Playgroud)
这正确输出
<script integrity="sha384-Li9vy3DqF8tnTXuiaAJuML3ky+er10rcgNR/VqsVpcw+ThHmYcwiB1pbOxEbzJr7"></script>
Run Code Online (Sandbox Code Playgroud)
这样做的原因是,它TagHelperAttribute具有public static implicit operator TagHelperAttribute(string value)隐式 ( =) 运算符的运算符重载,它将创建TagHelperAttribute并按原样传递字符串Value。
在 Razor 中,strings 会自动转义。如果要避免转义,则必须HtmlString改用。
| 归档时间: |
|
| 查看次数: |
1659 次 |
| 最近记录: |