Blazor 清理 MarkupString

2023-11-22

我正在尝试清理 MarkupString 的内容。实际上我创建了这个(基于https://github.com/dotnet/aspnetcore/blob/574be0d22c1678ed5f6db990aec78b4db587b267/src/Components/Components/src/MarkupString.cs)

public struct MarkupStringSanitized
{
    public MarkupStringSanitized(string value)
    {
        Value = value.Sanitize();
    }

    public string Value { get; }

    public static explicit operator MarkupStringSanitized(string value) => new MarkupStringSanitized(value);

    public override string ToString() => Value ?? string.Empty;
}

但渲染输出不是原始 html。我应该如何实现 MarkupStringSanitized 来使用

@((MarkupStringSanitized)"Sanitize this content")

一些建议(不一定适合OP,但适合其他想要解决问题的人):

  • 您没有提供进行实际清理的代码,因此我将说明(希望如此)明显的最佳实践,如果您遵循它,那就太好了。不要使用正则表达式(Regex)来解析 HTML
  • 另外,Sanitize()方法应遵循以下模式immutability在这种情况下
  • 我建议使用以下库Gans.XSS.HtmlSanitizer这是一个活跃的库并定期更新。

问题

Razor View Engine 不知道如何渲染MarkupStringSanitized。只是因为你输入了相同的经过净化的版本struct并不意味着它可以渲染它。为了让它渲染,你需要将它转换为它知道的东西,MarkupString

这是我使用你的时发生的情况HtmlSanitizedMarkup直接直接使用,无需任何修改。

@((MarkupStringSanitized)Content)

enter image description here

工作示例#1

这是使用我的 Markdown -> Html Playground 的示例(经过充分测试且有效):

enter image description here

MarkupStringSanitized.cs
public struct MarkupStringSanitized
{
    public MarkupStringSanitized(string value)
    {
        Value = Sanitize(value);
    }

    public string Value { get; }

    public static explicit operator MarkupStringSanitized(string value) => new MarkupStringSanitized(value);

    public static explicit operator MarkupString(MarkupStringSanitized value) => new MarkupString(value.Value);

    public override string ToString() => Value ?? string.Empty;

    private static string Sanitize(string value)  {
        var sanitizer = new HtmlSanitizer();
        return sanitizer.Sanitize(value);
    }
}
MarkupStringSanitizedComponent.razor
@if (Content == null)
{
    <span>Loading...</span>
}
else
{
    @((MarkupString)(MarkupStringSanitized)Content)
}

@code {
    [Parameter] public string Content { get; set; }
}

但在我看来,这种额外的转换是丑陋的。 (也许比我聪明的人可以清理掉它?)

工作示例#2

在这里我尝试扩展MarkupString使用扩展方法。看起来好一点,但也只是little.

MarkupStringExtensions.cs
public static class MarkupStringExtensions
{
    public static MarkupString Sanitize(this MarkupString markupString)
    {
        return new MarkupString(SanitizeInput(markupString.Value));
    }

    private static string SanitizeInput(string value)
    {
        var sanitizer = new HtmlSanitizer();
        return sanitizer.Sanitize(value);
    }
}
MarkupStringSanitizedComponent.razor
@if (Content == null)
{
    <span>Loading...</span>
}
else
{
    @(((MarkupString)Content).Sanitize())
}

@code {
    [Parameter] public string Content { get; set; }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Blazor 清理 MarkupString 的相关文章

  • 如何在Python中正确声明ctype结构+联合?

    我正在制作一个二进制数据解析器 虽然我可以依靠 C 但我想看看是否可以使用 Python 来完成该任务 我对如何实现这一点有一些了解 我当前的实现如下所示 from ctypes import class sHeader Structure
  • 为什么 C++ 不允许匿名结构?

    某些 C 编译器允许匿名联合和结构作为标准 C 的扩展 这是一些语法糖 偶尔会很有帮助 阻止其成为标准一部分的理由是什么 有技术障碍吗 哲学的 或者只是没有足够的需要来证明它的合理性 这是我正在谈论的内容的示例 struct vector3
  • 如何从任何类 blazor 服务器端读取 appsetting.json

    我知道如何从 razor 组件访问 appsettings json 但如何从 blazor 服务器端项目中的任何类访问 从剃刀组件我只需注入 注入IConfiguration config 并访问我需要的所有内容 例如 config Ge
  • Set-Cookie 在 Chrome 中不起作用

    我有一个奇怪的问题 我开发的网站之一在请求登录页面时返回防伪 cookie 当我检查 chrome 网络选项卡中的响应时 它包含标头 Set Cookie AspNetCore Antiforgery w5W7x28NAIs xxx pat
  • 错误:表达式不可赋值三元运算符

    我有以下代码 MPLABX XC8 编译器给出此错误 错误 表达式不可分配 U1ERRIRbits RXFOIF uart1 oerr 1 uart1 oerr 0 这是相关代码部分 typedef union struct bool fe
  • 如何让“dnu”命令在 OS X 上运行?

    刚刚下载并安装视觉工作室代码 https code visualstudio com 在 OS X 10 10 3 上 我已经设法部分遵循ASP NET 5 安装说明 https code visualstudio com docs ASP
  • AWS DynamoDB 与 ASP .Net Core 3.1.0 Identity 2.2.0

    我必须将 Asp net core Identity 2 2 0 与 AWS DynamoDB 集成 我正在使用 net core 版本 3 1 我搜索了参考资料 但没有找到任何好的参考资料 请帮我 我得到了一份参考资料https gith
  • 使用 for 循环创建链表

    这是我的结构 struct ListItem int data struct ListItem next 假设链表的第一个节点的 data 0 我想编写一个 for 循环来创建大小为 5 的链表 但我不知道如何工作 我尝试了以下方法 int
  • Windows 7 中的 VS2017“尝试确定 dotnet.exe 的进程 ID 时发生错误”

    项目属性 gt 启用 SSL false 关闭 选择 IIS Express 作为调试选项 已安装 IIS 10 0 Express 总是低于错误 任何人都可以建议修复吗 已经尝试过以下网址 但仍然没有希望 尝试确定托管您的应用程序的 do
  • C# - 使用 Entity Framework Core 3 HasConversion 将字段转换为 .Net Core 3.1 中的 JSON

    我试图在项目中的所有模型之间动态完成转换 数据库上下文 cs protected override void OnModelCreating ModelBuilder modelBuilder var entityTypes modelBu
  • 将 Blazor JS 脚本写入 blazor 组件

    我正在构建 Blazor 应用程序 我需要动态添加仅在单个 Blazor 组件中使用的 JavaScript 文件 您可能知道 Blazor 只允许向根 HTML 文档添加脚本标签 这使得添加仅在单个组件中需要的 JavaScript 文件
  • 在 ASP.Net Core 应用程序中动态更改 SQL Server 连接字符串

    我一开始打开一个数据库 然后需要根据用户选择两个值打开另一个数据库 数据库选择必须在运行时进行 并且每次都会改变 尝试使用连接字符串类访问连接字符串 并尝试了其他选项 例如我不理解的单例 我在运行 SQL Server Express 的本
  • 如何使 EF-Core 使用 Guid 而不是字符串作为其 ID/主键

    当我查看 ASP NET 3 Identity 时 它使用string而不是一个Guid为唯一的主键 In my Entity Framework code first Users ApplicationUser类I继承Identity类
  • 如何在 Blazor 视图中显示图像

    我正在尝试在 Blazor 视图中显示图像 但它不起作用并且仅显示图像图标 img src Images watch jpg width 300px 我的图像位于此路径中wwwroot Images watch jpg 您可能遇到了这个错误
  • 在 ASP.NET Core 的中间件中注入服务

    我想根据 HTTP 标头值注入服务 所以我有 2 个类 DbDataProvider 和 InMemDataProvider 它们都是从 IDataProvider 实现的 每当进行 API 调用时 客户端都会传递一个标头 该标头确定是需要
  • Mediatr 范围问题

    我正在使用 Mediatr 处理来自队列的消息 我可以得到一个简单的例子来工作 但是 当我尝试将对象注入到我的处理程序中时 我遇到了问题 public class MessageCommandHandler IRequestHandler
  • 在project.json .Net Core中本地管理nuget

    我不想依赖 nuget 服务来下载依赖项 我想在我的 Net Core 应用程序中本地下载并使用 nuget 包 是否可以 方法与之前相同 打开您的NuGet config https docs nuget org consume nuge
  • 如何在 ASP.NET Core Web API 中传递 int 数组

    我有这个 Web API 方法 Route api controller ApiController public class SubjectsController ControllerBase HttpGet children publi
  • 如何在 VS2017/2015 中打开 .xproj 文件

    我有一个带有扩展名的 NET core 项目 xproj 当我在VS 2017中打开项目时 项目文件 xproj migrated to csproj 如何打开 xproj 文件 Visual Studio 2017 2015 我需要安装任
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List

随机推荐

  • 如何在 Node 4.x 中使用 Promise?

    既然 ES6 在 Node 4 x 中正式成为标准 那么如何使用 Promises 呢 做模块 例如本机fs模块 自动与 Promise 一起工作 或者必须专门编写模块才能与 Promise 一起使用 你怎么知道 Promise 可以用于什
  • 三种颜色的三角形

    我正在尝试为这个问题编写代码 来源 https www codewars com kata insane coloured triangles train c 彩色三角形是由一行颜色创建的 每种颜色都是 红色 绿色或蓝色 连续行 每行少一种
  • C++11:std::locale::empty() 是一件事吗?

    尝试编译一些代码来自 StackOverflow 基本上是这些行 std wifstream wif filename wif imbue std locale std locale empty new std codecvt utf8
  • 为什么我不能在单个服务器请求中插入带有外键的记录?

    我正在尝试使用外键进行简单的插入 但似乎我需要使用db SaveChanges 对于每条记录插入 我怎样才能只使用一个db SaveChanges 在这个程序的最后 public static void Test using var ent
  • 多次导航至同一实体

    当有 2 个导航时 我遇到两个实体之间的连接问题 具体来说 我有以下课程 public class TableA public TableA ListBs new List
  • Zend Framework 2:在视图中获取匹配的路由

    我目前正在通过开发一个大致基于骨架应用程序的小型 MVC 应用程序来学习 ZF2 现在我正在尝试根据匹配的路由隐藏一些固定的 HTML 元素 仅作为示例 我不希望在登录阶段显示主菜单 我可以通过将切换参数作为控制器操作的返回值传递来轻松做到
  • 如何在polymer中设置动态Meta标签和Open Graph标签?

    我有一个聚合物节点站点 我一直在研究它 但不知道如何包含动态元标记和开放图标记 Jquery 无法工作 也无法使用polymer api 添加节点 因为它会在页面加载后添加所有标签 而 facebook 将无法读取这些标签 谷歌爬虫确实会渲
  • 如何在 Pygame 中根据角度移动精灵

    我在移动精灵时遇到问题 我可以毫无问题地在 x 轴和 y 轴上移动它们 我不知道如何才能按照某个角度移动它们 我的意思是 我正在尝试创建一个函数 其中包括我尝试移动的对象 其速度和方向 应以度为单位测量 就像是 MovingObject o
  • 在使用 Ant 编译的文件中找不到主类

    我在 Eclipse 中编译并运行我的程序 一切正常 但是当我用 Ant 打包它并运行它时 出现以下错误 Exception in thread main java lang NoClassDefFoundError org supercs
  • VS 2010 鼠标处理器扩展 - 不工作

    我正在尝试 Visual Studio 2010 扩展 其中我需要处理 IMouseProcessor 公开的事件 据我从文档中可以看出 我应该创建一个 IMouseProcessorProvider 并使用 MEF 导出 以便 Visua
  • 在 .NET 中比较 2 个 XML 文档的最佳方法[重复]

    这个问题在这里已经有答案了 我有一堆单元测试需要检查 XML 输出 我已经开始比较字符串 但是由于格式和表面差异的阻碍 这不会扩展 NET 中评估生成的 XML 在语义上是否与测试期望的相同的最简单方法是什么 Closed作为重复您将如何比
  • SQL“IN”语句的 Linq 版本

    我有以下 3 个表作为简单 项目标记 模式的一部分 物品 项目 ID 整数 品牌varchar 名称 varchar 价格钱 条件varchar 说明 varchar 有效位 Tags 标签 ID 整数 名称 varchar 有效位 标签映
  • 根据数据设置 Dojox 网格行的样式

    我正在尝试根据网格中的值在 DojoX 1 2 3 网格内设置行的样式 网格布局 var view1 noscroll true rows field TASK ID name ID width 80px get this getColor
  • SQL Server 性能 结果集 vs 输出参数 vs 返回值

    我正在权衡使用三种不同方法之一将单个标量值从存储过程返回到我的 C 例程的潜在性能影响 谁能告诉我其中哪个 更快 最重要的是 为什么 方法一 CREATE PROCEDURE GetClientId DealerCode varchar 1
  • 一次运行多个 exec 命令(但要等待最后一个命令完成)

    我环顾四周 似乎找不到任何人正在尝试做我想做的事情 我有通过 POST 请求传递到我的函数的信息 根据该数据 我运行 exec 命令来运行 TCL 脚本一定次数 使用不同的参数 基于 post 变量 现在 我在 foreach 中有 exe
  • 4 点变换图像

    我需要转换位图图像 并将其 4 个角点从一个位置移动到另一个位置 任何可以在 Windows 上运行的代码 最好是 C VB NET 甚至可以帮助如何使用可编写脚本的程序 例如画图网 or Photoshop会被接受 Java 高级成像 A
  • SFINAE 有符号和无符号的区别

    我有将不同算术类型转换为半精度浮点类型的函数 只是一个uint16 t在最低级别 我对整数和浮点源类型有不同的函数 使用 SFINAE 和std enable if template
  • Xcode 卡在“您的应用程序正在上传”

    我在将应用程序从 Xcode 提交到 App Store 时遇到问题 我已经完成了与我的项目相关的所有工作 并且它在我的 iPhone 和 iPad 上运行良好 但当我提交项目时 我面临着一个巨大的问题 存档后首先我完成了验证 现在 我在管
  • 无密码取消工作簿保护

    我有一个流行的 VBA 代码来取消对工作表的保护 但我仍然遇到工作簿受到保护的问题 Sub PasswordBreaker Breaks worksheet password protection Dim i As Integer j As
  • Blazor 清理 MarkupString

    我正在尝试清理 MarkupString 的内容 实际上我创建了这个 基于https github com dotnet aspnetcore blob 574be0d22c1678ed5f6db990aec78b4db587b267 sr