统一码浏览器
用于浏览 Unicode 字符数据库的 Blazor C# Web 应用程序。
该应用程序托管在那里:https://unicode-browser.azurewebsites.net/home
特征
- 以 Unicode 代码点分解文本。
- 查看有关代码点的详细信息。
- 浏览给定 Unicode 块中的代码点。
- 按名称搜索任何字符。
- 在专用于 Unicode 块的页面上显示附加信息(以 Markdown 格式)。
尝试一下
您可以尝试使用以下几个 URL 来查看应用程序的运行情况:
- https://unicode-browser.azurewebsites.net/blocks/Miscellaneous%20Symbols%20and%20Pictographs
- https://unicode-browser.azurewebsites.net/codepoints/1F365
- https://unicode-browser.azurewebsites.net/search?q=Tree
- https://unicode-browser.azurewebsites.net/decomposition?text=????????
- https://unicode-browser.azurewebsites.net/blocks/Tangut
- https://unicode-browser.azurewebsites.net/blocks/Tags
使用的主要技术
- ASP.NET Core 3.0(.NET Core 3.0.0-预览版8.19405.7)
- 布拉佐尔
- 马克迪格 0.17.1
- 引导程序4.1
- 真棒字体 5.0.10
- jQuery 3.3.1(因为 Bootstrap JS 似乎仍然需要它)
文档链接
Blazor 文档可从 docs.microsoft.com 获取。
背景故事
该应用程序的大部分内容最初是在 2016 年初使用 ASP.NET Core、TypeScript 和 Aurelia 的预览版本编写的。当时,这是一个了解这些非常新的框架的机会,而且效果很好。
当前版本的源代码主要是早期原型的直接改编。事实上,大部分服务器代码只是简单地移植到 ASP.NET Core 2.1,几乎没有进行任何修改。
然而,客户端部分才是“有趣”的地方,因为只有 HTML 部分是可重用的。 (并且仍然需要迁移到 Bootstrap 4 / Fontawesome 5)这又是测试和学习如何使用 Blazor 以及跟上其他技术最新动态的绝佳机会。
陷阱
Blazor 是一项非常新的技术,仍处于早期预览阶段,有时可能很难处理。
正因为如此,我发现自己在一些我认为微不足道的事情上绊倒了,而且我觉得我必须编写大量的样板代码才能让这些事情发挥作用。
例如
* 令我非常失望的是,我无法在服务器和客户端之间共享我的模型类,因为 Blazor 目前使用 SimpleJson,但它受到很大限制。 ? (遗憾的是,Newtonsoft.Json 目前似乎运行得还不够好。?)
- 必须手动绑定到查询字符串参数
- 页面有时需要手动侦听位置更改(例如同一页面上的 URL 更改)
- 没有现成的状态管理。 (例如,当您在历史记录中前进和后退时会发生什么)=> 我通过根本不需要状态管理并始终依赖于路由或查询字符串来解决这个问题。
- 组件生命周期似乎不太可扩展:在基类中添加复杂的行为很困难(例如在加载内容之前显示旋转器)
3.0 中情况有所改善(路由参数现在已解码?),但我认为大多数观点仍然正确。
.NET Core 3.0 的一些新颖之处:
- System.Text.Json 是 Blazor 的新(默认)JSON 序列化器。然而,它的边缘非常粗糙。无法开箱即用地反序列化不可变类型是一个真正的痛苦。 ? => 我实现了一个 JsonConverter 来管理这个特定的情况。通过依赖动态代码生成,我们可以创建一种新 API 将接受反序列化的类型,然后实例化不可变类型。
- 在预览版 8 中,Blazor 客户端项目仍然必须以 .NET Standard 2.0 为目标,而不是 .NET Standard 2.1。