快速了解 ASP.NET Core Blazor

最近在几个微信 .NET 交流群里大家讨论比较频繁的话题就是这几天自己的面试经历。

面试官:“你刚说你喜欢研究新技术,那你有了解过 Blazor 吗?”

作为一位专注于 .NET 开发的软件工程师,你好意思说你对 Blazor 一点也不解吗?.NET 新技术也就是那么几个,连微软最近在逛推的 Blazor 你都不了解,你好意思说你喜欢研究新技术?

讲真,确实有很多童鞋对 Blazor 还不了解,平时埋头写代码改 Bug,哪有时间去研究 Blazor,再说这种玩意儿公司会不会采用还是个很大疑问呢。是这个理,但如果等你的公司(国内使用了.NET 技术的公司)都开始使用 Blazor 了,Blazor 还能算是新技术吗?出于真正对技术的兴趣和热爱,对于新技术,有人会主动地去了解(不一定要研究得很深),而不是等到需要用的时候再去了解。至少他们会知道新技术有哪些优点,在公司技术选型上就可以给到自己的意见甚至推广新技术的使用,这可能就是他们和普通程序员拉开差距的原因之一。

不管你是真对 Blazor 感兴趣,还是只是为了应付面试,作为 .NET 开发者,没用过 Blazor 很正常,但至少应该了解一下,哪怕是花个一两分钟看看这篇文章的介绍。

使用 C# 实现 Web 交互式 UI

Blazor 允许你使用 C# 来实现 Web 交互式 UI,而不需要使用 JavaScript。尽管 JavaScript 的生态很强大,但这种弱类型语言在业务逻辑比较复杂的大型 Web 开发上还是存在较大的缺陷。当然,经过几年的发展 JavaScript 的弱类型问题可以通过工程手段来解决,甚至使用 TypeScript 来替代,但在实现可重用组件上还是有诸多的不理想。

Blazor 应用可以使用 C#、HTML 和 CSS 实现可重用 Web UI 组件,客户端和服务器代码都用 C# 编写的,允许你共享代码和库。Blazor 是 ASP.NET Core 的一个新特性,所以可以很好的集成到 ASP.NET Core MVC/Razor Pages 应用中。

下面是一段来自于模板的 Blazor 代码:

@page "/counter"<h1>Counter</h1><p>Current count: @currentCount</p><button class="btn btn-primary" @onclick="IncrementCount">Click me</button>@code {private int currentCount = 0;private void IncrementCount(){currentCount++;}
}

在 WebAssembly 或服务器端运行

Blazor 支持两种运行方式,一是在客户端使用 WebAssembly 运行,二是在服务器端运行直接渲染到浏览器。

Blazor 可以使用 WebAssembly 直接在浏览器中运行客户端 C# 代码,正因为它是运行在 WebAssembly 上的 .NET 程序,所以客户端也可以重用服务器端的代码和库。

即使不使用 WebAssembly,Blazor 也可以在服务器端运行客户端的业务逻辑。客户端 UI 事件使用实时消息框架 SignalR 发送回服务器,一旦执行完成,所需的 UI 更改将发送到客户端渲染到 DOM 中。

目前主流开发单页应用(SPA)使用 Vue 或 React 的很多,但要实现服务器端渲染(SSR),还是挺麻烦的,尽管有现成的像 Next.js 或 Nuxt.js 这样的框架可以使用,但由于它们更新迭代比较快,依赖的 npm 包多而杂,后期维护和升级成本也很高。所以从 SSR 支持这一点来讲,Blazor 应用还是有明显优势的。

基于开放的 Web 标准

为了使用统一的编程语言或使用统一的标准,常见的做法是将一种编程语言编写的代码转换为另一种编程语言,比如将 TypeScript 编写代码转换成 JavaScript 以便在浏览器中运行。而 Blazor 使用的是开放的 Web 标准,不需要额外的插件或代码语言转换。Blazor 可以在所有主流的 Web 浏览器中工作,包括移动端浏览器。

在客户端运行 Blazor 代码和 JavaScript 框架一样是在安全的沙箱中执行的,在基于开放的 Web 标准基础上,Blazor 具有服务器端代码的灵活性,比如直接连接数据库。

和 JavaScript 交互

在 Blazor 应用中,你可以在 C# 代码中调用 JavaScript 代码,也可以在 JavaScript 代码中调用 C# 代码,两者可以很容易实现交互操作。好处是,在使用 C# 编写业务代码时,你依然可以继续使用现有庞大的 JavaScript 库生态系统。当使用服务器端运行代码时,Blazor 会负责在客户端使用 JavaScript 无缝调用 C# 代码。

下面是一个 JavaScrit 调用 C# 的示例。

先使用 JSInvokable 特性标注一个 C# 方法为允许 JavaScript 调用:

<button type="button" class="btn btn-primary"onclick="exampleJsFunctions.returnArrayAsyncJs()">Trigger .NET static method ReturnArrayAsync
</button>@code {[JSInvokable]public static Task<int[]> ReturnArrayAsync(){return Task.FromResult(new int[] { 1, 2, 3 });}
}

然后在 JavaScript 代码中调用 C# 代码:

window.exampleJsFunctions = {...returnArrayAsyncJs: function () {DotNet.invokeMethodAsync('BlazorSample', 'ReturnArrayAsync').then(data => {data.push(4);console.log(data);});},...
};

其它

对我来说 Blazor 最吸引的优点是前后端代码的共用以及组件的重用。通过 nuget 管理和引用共用组件和库不仅比 npm 包管理方便,而且体积也小很多。

Blazor 的生态也正逐步发展起来了,虽然还没有听说哪个大公司在用,但 Blazor 的理念是未来趋势,值得你花点时间了解和研究一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307476.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core集成Nacos配置中心之适配多格式配置

前言 默认情况下&#xff0c;用nacos-sdk-csharp集成ASP.NET Core的配置系统&#xff0c;是基于JSON格式的数据。随着业务系统的多样化&#xff0c;可能用的配置格式也是各有千秋的。有的会用yaml/yml&#xff0c;有的会用ini&#xff0c;有的会用xml&#xff0c;等等。那么如果…

Git的使用(快速入门)

文章目录[TOC]一:将本地的项目提交到Git上二:GIt的基本操作1:建立一个本地仓库(1):类别(2):创建全新的仓库(3):克隆远程仓库2:查看文件的状态3:在桌面上的文件提交到远程仓库4:在idea中的文件提交到远程仓库5:分支(1):何为分支(2):常用命令(3)注意6:解决合并冲突(1):问题展示(2…

为什么这么忙,还依然做不好事情?

一直都很喜欢《重来》系列&#xff0c;最近出了《重来3&#xff1a;跳出疯狂的忙碌》&#xff0c;第一时间在微信读书中阅读了&#xff0c;让我们印象比较深刻的就是「冷静」和「效率」&#xff0c;本文主要说说效率的问题。书的作者是贾森弗里德&#xff08;Jason Fried&#…

开源特训营 - Lesson 6 - 如何提交一个合格的PR

编辑&#xff1a;李明康责编&#xff1a;袁睿斌作者&#xff1a;课程助教 - 苏斌主讲教师&#xff1a;张齐勋&#xff08;北京大学&#xff09;、赵生宇&#xff08;同济大学&#xff09;本次课程的主题为《如何提交一个合格的PR》&#xff0c;主讲者为来自北京大学的张齐勋老师…

改进程架构,Edge优化浏览器内存问题

微软 Edge 团队称&#xff0c;“今天的浏览器更像是操作系统&#xff0c;而不是文档查看器。用户正在浏览器中执行越来越多的任务&#xff0c;而在桌面应用程序中执行的任务越来越少。与此同时&#xff0c;每个网页、Web 应用程序和扩展程序都在使用内存&#xff0c;这也会使用…

中芯国际第二代FinFET工艺有望与2020年底试产

媒体报道&#xff0c;第一代FinFET 14纳米已于2019年四季度量产&#xff1b;第二代FinFET N1已进入客户导入阶段&#xff0c;可望于2020年底小批量试产。梁孟松披露&#xff0c;中芯国际的下一代N1工艺和14nm相比&#xff0c;性能提升了20%&#xff0c;功耗降低了57%&#xff0…

gRPC-微服务间通信实践

微服务间通信常见的两种方式由于微服务架构慢慢被更多人使用后&#xff0c;迎面而来的问题是如何做好微服务间通信的方案。我们先分析下目前最常用的两种服务间通信方案。gRPC&#xff08;rpc远程调用&#xff09;场景&#xff1a;A服务主动发起请求到B服务&#xff0c;同步方式…

移动 Azure 资源后如何快速修复 Dashboard

点击上方蓝字关注“汪宇杰博客”导语Azure 用户经常因为不够有钱&#xff0c;需要把资源移动到另一个资源组或订阅中。移动完成后&#xff0c;会导致资源对应的 Dashboard 失效。通常&#xff0c;我们都需要从 Dashboard 上将找不到的资源删除&#xff0c;并逐个重建。有没有快…

八大排序算法之插入排序

一:直接插入排序 1:思想 首先选择一个哨兵,我们默认将第一个数作为哨兵,随着循环的进行,我们一直将我们待插入数的前一个数作为哨兵然后就是插入的数与哨兵比较&#xff0c;比哨兵小的话&#xff0c;就将哨兵后移&#xff0c;然后再与哨兵前面的数进行比较&#xff0c;直到遇…

跟我一起学Redis之五种基本类型及其应用场景举例(干了6个小时)

前言来啦&#xff0c;老弟&#xff1f;来啦&#xff0c;上一篇就当唠唠嗑&#xff0c;接下来就开始进行实操撸命令&#xff0c;计划是先整体单纯说说Redis的各种用法和应用&#xff0c;最后再结合代码归纳总结。Redis默认有16个数据库(编号为0~15)&#xff0c;默认使用第0个&am…

leetcode周赛6070. 计算字符串的数字和

一:题目 二:上码 class Solution { public:/**思路:1.设置一个while循环&#xff0c;循环的条件是s.length<k2.while里面进行 1>:将字符串按k个进行拆分成个单个字符&#xff0c;并将其转换成数字,然后计算将计算结果再组成字符串 */string digitSum(string s, int k) {…

ASP.NET Core 中的 User Agent 识别及搜索引擎爬虫鉴定方法

User Agent中文名为用户代理&#xff0c;简称 UA&#xff0c;它是一个特殊字符串头&#xff0c;使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。百度百科在 ASP.NET Core 中&#xff0c;可以通过以下代码在 …

leetcode周赛6071. 完成所有任务需要的最少轮数

一:题目 二:上码 class Solution { public:/**思路:1.如果x1的话,那么的话 直接返回-12.如果x2的话&#xff0c;那么就一次执行3.如果x是3的倍数的话,那么就直接执行 x/3 次4.如果x/3 余数是1的话 那就执行 x/31,比方说是4 其实是两个2&#xff0c;但是我们求数的的时候,我们求…

netcore使用 jenkins + supervisor 实现standalone下多副本自动化发布

前面的文章聊过用 jenkins 做了一个简单的自动化发布&#xff0c;在shell中采用的是 BUILD_IDdontKillMe nohup dotnet xxx.dll & 这种简单的后台承载&#xff0c;如果你的业务量相对比较小&#xff0c;可以用这个方法玩一玩&#xff0c;但存在二个问题&#xff1a;1. 无法…

实战解读ASP.NET Core身份认证

长话短说&#xff1a;上文我们聊了 ASP.NET Core 基于声明的访问控制到底是什么鬼&#xff1f;今天我们乘胜追击&#xff1a;聊一聊ASP.NET Core 中的身份验证。身份验证是确定用户身份的过程。授权是确定用户是否有权访问资源的过程。1. 万变不离其宗显而易见&#xff0c;一个…

Java并发之AQS

文章目录一:AQS简介二:了解AQS 上锁和释放锁的原理1:前言2:上锁(非公平锁)(1):我们从main主函数中点进去(2):从lock进入(3):找到非公平锁中的lock(4):查看acquire()方法(5):查看tryAcquire(arg)方法a:前言介绍b:进入ReentrantLock类中的nonfairTryAcquire方法(6):addWaiter(Nod…

网络知识 | 《图解TCP/IP》读书笔记(上)

【网络知识】| 作者 / Edison Zhou这是EdisonTalk的第290篇原创内容作为一个专业的IT技术人&#xff0c;一个Web应用开发者&#xff0c;不了解网络基础和协议&#xff0c;怎么能行&#xff1f;本文是我2016年阅读《图解TCP/IP》一书的读书笔记&#xff0c;希望对你有所帮助&…

Java并发之semaphore(信号量)

文章目录1:官方解读2:通俗易懂的例子解析3:代码解析4:Semaphore的应用5:类结构和相关方法(1):类结构(2):acquire()方法(3):release()方法6:总结1:官方解读 semaphore信号量就是并发工具类,Semaphore管理着一组许可permit&#xff0c;许可的初始数量通过构造函数设定。 当线程要…

IdentityServer4系列 | 初识基础知识点

前言我们现在日常生活中&#xff0c;会使用各式各样的应用程序&#xff0c;层出不穷&#xff0c;其中有基于网页浏览方式的应用&#xff0c;有基于手机端的App&#xff0c;甚至有基于流行的公众号和小程序等等&#xff0c;这些应用&#xff0c;我们不仅要实现各个应用的功能之外…

八大排序算法之终章---归并排序

一:简单介绍 归并排序排序就是利用归并的思想实现的排序方法 它的原理是将初始化序列划分成n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并&#xff0c;得到(n/2)个长度为1或者2的有序子序列;然后再两两合并…不断重复 直到最后 得到一个长度为n的有序…