Blazor 初探

Blazor 初探

目录

一、新建项目

二、ASP.NET Core Blazor 项目结构

三、结合代码讲解

四、改造

五、配置文件的使用

六、发布到 Linux(CentOS)

题外话,期间遇到个问题

反向代理

七、地址

独立观察员 2021 年 4 月 11 日

 

上个月发了篇文章《Blazor 中如何下载文件到浏览器》,介绍了调用《下载中转加速器 VPSDownloader.NET(.NET Core 程序部署到 Linux 系统)》中提到的 VPS 文件中转下载服务后,如何将下载的文件以 Blazor 的方式传出到浏览器的方法。那么这篇文章就回过头来,介绍一下本项目(VPSDownloader.NET)使用 Blazor 的过程。

 

一、新建项目

在 VisualStudio 中选择 “Blazor 应用” 项目模板:

 

填写项目名称:

 

选择 Blazor Server 应用:

 

二、ASP.NET Core Blazor 项目结构

微软官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/blazor/project-structure?view=aspnetcore-5.0#blazor-server 

 

项目结构图示一:

 

项目结构图示二:

 

Startup.cs 分析:

 

三、结合代码讲解

首先是 Pages 文件夹中的 _Host.cshtml,这个是应用的根页面,也就是整个网站的完整骨架,@page "/" 指定了路由,表明不带任何路径来访问就是到这个页面。

 

可以看到它有着完整的 html 结构,非 html 常规标签的那些一般都是 Razor 组件,其中 body 后紧跟的一行的那个组件就是其它具体页面将会填充的位置:

 

当然,也不是直接填充过来,而是通过一个 App 组件,分为找到页面和未找到页面的情况,找到的页面默认使用 MainLayout 布局模板:

 

MainLayout.razor 通过使用 @inherits LayoutComponentBase 这个继承声明来表明自己布局模板的身份:

 

可以看到整体布局包括侧边菜单栏和右侧主内容区,主内容区中又分为放关于按钮的顶栏以及实际内容区:

 

侧边菜单栏由 NavMenu 组件渲染,菜单项中的导航链接是 NavLink 组件:

 

网页宽度较小时,菜单栏可收缩,控制收缩和展开的逻辑是使用 C# 代码,写在 @code {} 块中,如上图,效果如下图:

 

四、改造

首先我们的主页不需要关于栏,有些边距也要去掉,所以拷贝 MainLayout 布局模板并改名为 NoPaddingLayout.razor:

 

site.css 中添加一些 CSS 类:

 

然后主页 Index.razor 通过 @layout NoPaddingLayout 来使用这个布局页:

 

@inject 就是注入,可参考开头提到的文章。剩下的就是拷贝之前前端页面然后修改的,简要解释:

 

@xxx 就是绑定值,适用于标签;@bind="yyy" 就是双向绑定,适用于输入框;@οnclick="zzz" 表明点击时调用 zzz () 方法。

这样页面逻辑就不需要使用 JS、Vue 这些的了,直接用 C# 就能完成,是不是很方便呀。

 

首页效果:

 

五、配置文件的使用

配置文件是 appsettings.json,可以添加自己的配置项,修改监听地址就是直接加上 urls 配置项,其它地方都不需要修改(不过自动打开浏览器功能好像会失效):

 

在代码中使用配置项(这里是 IsUseConfigUrl):

// 引用和注入;
@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration// 使用示例;
bool.TryParse(Configuration[$"{nameof(IsUseConfigUrl)}"], out bool isUseConfigUrl);
IsUseConfigUrl = isUseConfigUrl;

 

六、发布到 Linux(CentOS)

项目上右键 -- 发布,打开发布页面,配置目标框架 net5.0,目标运行时 linux-x64 等,点击发布,发布到本地文件夹:

 

之后就是拷贝到 Linux 机器上,运行相关脚本,脚本在项目中有提供(使用方法以及 Linux 中 .NET 的 运行环境安装等可参考开头提到的文章):

 

题外话,期间遇到个问题

现象一:使用配置文件设置 urls 时,直接运行是正常的,使用 Linux 服务方式启动则不能正确读取配置,会使用默认的 localhost:5000。

现象二:直接代码里写死 urls,使用服务方式运行,功能是正常的,但是样式、图片等都展示不出来:

 

这两个现象结合起来思考,前者相当于读取不到目录下的配置文件,后者相当于读取不到目录下的静态文件,那么很容易想到是程序的运行环境(路径)不对,于是使用以下方式解决,也就是在启动脚本(Start.sh)中先 cd 到相应的目录再运行即可:

 

其实以前我也是习惯这样写两行的,这次不知道为什么抽风了偷懒写成一行这种,还以为是一样的呢,害我排查了半天,吸取教训!

 

反向代理

由于启动的服务是带端口的,不方便记忆,也不美观,于是通过宝塔面板添加个反向代理网站:

 

七、地址

项目地址:https://gitee.com/dlgcy/VPSDownloader.NET/tree/Blog20210411

发行版地址:https://gitee.com/dlgcy/VPSDownloader.NET/releases/Blog20210411

下载器地址:http://vps.dlgcy.com/

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

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

相关文章

Relaltek声卡在UBUNTU下没有声音的解决方法。

为什么80%的码农都做不了架构师?>>> The computer has an HDA Intel chip (Realtek ALC887) and I couldnt open alsamixer (this error was displayed: "load hw:0 error: Invalid argument"), although the sound seemed to be working in …

.Net项目模板进阶

友情提示:这篇有点长,有点绕,加油!上一篇文章,简单的说明了一下.net项目模板的创建,主要是通过在项目文件*.csproj同目录下添加.template.config文件夹和里面的template.json,再用dotnet new -i…

Web Worker 使用教程

一、概述JavaScript 语言采用的是单线程模型,也就是说,所有任务只能在一个线程上完成,一次只能做一件事。前面的任务没做完,后面的任务只能等着。随着电脑计算能力的增强,尤其是多核 CPU 的出现,单线程带来…

NET问答: C# 中是否有最高效的方式对大文件做 checksum ?

咨询区 Dario:我需要在多台机器间同步大文件,不过文件高达 6G,通常我都是每几周手工同步一次,考虑到文件的文件名经常变,为了检验一致性,我考虑使用 checksum 机制。我的计划是在 源机器 和 目标机器 上做 …

linux宝塔类似工具,有没有比宝塔面板更好的linux运维工具?

我是一个站长,现在建站seo是比较重要的部分,买了独立ip的云服务器主机,为了就是能够seo效果好点.建站优化我不担心,最郁闷的就是linux服务器运维这块,宝塔linux面板是必须安装到服务器上,比较消耗服务器内存,运维比较麻烦.还有就是购买宝塔面板的附带插件比较贵,基本买个网站防…

世界上最难的5种编程语言

每个程序员都熟悉许多编程语言。许多编程语言都是高级的,它们的语法是人类可读的。然而,也有一些低级语言,对于一个人来说,读起来很困难,但是可以理解。您是否遇到过一种既不可读又不可理解的编程语言?有一些编程语言…

云原生 | .NET 5 with Dapr 初体验

【Dapr】| 总结/Edison Zhou分布式应用运行时Dapr目前已经发布了1.1.0版本,阿里云也在积极地为Dapr贡献代码和落地实践。作为一名开发者,自然也想玩一玩,看看Dapr带来的新“视”界到底是怎么样的。1关于DaprDapr(Distributed Appl…

Python资料分享来袭,收下不谢!

近几年,机器学习一直很火,小编也有意识地收集了机器学习相关的资源,经过长时间的积累和沉淀,内容涵盖“Python教程”、“编程指南”、“学习视频”等。现在,小编准备将这些资料免费分享给大家!扫描下面二维…

我敢说,这是最全的常用设计模式汇总

先分享一个小故事两个年轻人是大学同班同学,他们毕业后一起被同一家公司录取,可以说是站在相同的起跑线上。两个人都对未来信心满满,踌躇满志。其中一人怀抱满腔激情,到处学热门框架,但受限于公司体量和业务逻辑&#…

Python为什么是编程语言中最skr的?

源 / 大数据文摘(BigDataDigest) 编译 / 小七、Virgil、AlieenPython的出现让计算机编程语言不再是生僻的专业技能,而是常人都能学习和使用的万金油。《经济学人(Economist)》近日对Python的一篇专题报道&#xff0c…

Linux系统管理员的Bash指南,11条Bash实践经验!

每个职业都有最常用的工具。对于许多系统管理员来说,shell可能是比较熟悉的。在大多数Linux和其他类Unix系统上,默认的shell是Bash。Bash是一个相当古老的程序,它起源于20世纪80年代后期。但它建立在更多,更老的shell上&#xff0…

Asp Net Core 5 REST API 使用 RefreshToken 刷新 JWT - Step by Step(三)

翻译自 Mohamad Lawand 2021年1月25日的文章 《Refresh JWT with Refresh Tokens in Asp Net Core 5 Rest API Step by Step》 [1]在本文中,我将向您演示如何在 Asp.Net Core REST API 中将 Refresh Token 添加到 JWT 身份验证。我们将覆盖的一些主题包含&#xff1…

国外的程序猿可以工作到退休而国内的为什么这么短命(思维认知)

首先我想说明的是国外的程序猿也存在加班,他们也要赶项目,所以加班不算什么原因。真正的原因是我们国内的很大一部分程序猿只是工具的使用者,不会去思考工具的产生和原理,用惯了一个高效的工具就被这个工具套牢成为奴隶&#xff0…

使用 docker 部署 mdnice

使用 docker 部署 mdniceIntro最近 mdnice 的在线版使用开始需要登录才能访问,一方面我觉得我的文章会被保存的他们的服务器上,使用他们的平台就能轻松拿到很多文章的数据,他们甚至是可以直接拿到 markdown 原始内容去别的平台分享转发&#…

细数近年来机器学习研究的几大怪现状

人工智能领域的发展离不开学者们的贡献,然而随着研究的进步,越来越多的论文出现了「标题党」、「占坑」、「注水」等现象,暴增的顶会论文接收数量似乎并没有带来更多技术突破。最近,来自卡耐基梅隆大学的助理教授 Zachary C. Lipt…

50K求聘.NET,我们是认真的!

今年的节奏特别快,不知道你有没有同感?春节刚过,跳槽季仓促开始,打了个疫苗,过了个清明,一转头4月过半,金三银四就快尾声了,真是时光飞逝。当然,手速快的已经offer拿到手…

linux编译redis打包,linux下下载redis,并且编译

1:下载、解压、编译$ wget http://download.redis.io/releases/redis-3.0.6.tar.gz$ tar xzf redis-3.0.6.tar.gz$ cd redis-3.0.6$ make2:结果显示很多error,127,1,2之类的,然后我参考了这个网站https://w…

github star破13k,Dapr 能否引领云原生中间件的未来?

Dapr(Distributed Application Runtime ,分布式应用运行时)是微软新推出的,一种可移植的、serverless 的、事件驱动的运行时,它使开发人员可以轻松构建弹性,无状态和有状态微服务,这些服务运行在…

现在的便签本都这么社会了!?重复写万次还能云端保存

不知模友们有没有感觉到每天脑子要记的事情越来越多不说事情杂七杂八重点是精力有限刚说完的事转眼就忘了想过在电脑贴满便利贴想过本子记录好每天要做什么But ......每天忙的天昏地黑啥都不记得了又懒的随身带着本子太重不好携带真想能有一个神器让这一切不再纠结一款神奇又黑…

C#类类型“.NET技术”

类类型是由字段数据(成员变量)和操作字段数据的成员(属性、方法、构造函数、事件等)所构成的自定义类型。其中字段数据表示类实例(对象)的状态。 在C#中,类使用class关键字定义,例如…