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 的出现,单线程带来…

bert模型需要什么版本Linux,Bert模型

Bert语言表征预训练。1有上下文——根据整句话生成词表征2无上下文——word2vec 和glove词汇表中每个单词生成单个词嵌入表征,bank、bank deposit、river bank 相同表征Unsupervised(仅使用语料库),深度双向Bert建立在上下文预训练语境表征工作基础上,半…

Hmm

http://blog.sina.com.cn/s/blog_46ed82810100cgwb.html 彻底搞定C指针-const int * pi/int * const pi的区别 http://www.qnr.cn/pc/lin/study/201008/521819.html Linux系统内存监控全面讲解之free命令 http://www.qnr.cn/pc/lin/study/201008/521844.html 具有杀…

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…

linux中的ip地址范围,linux – ip地址范围参数

从http://linux-ip.net/html/tools-ip-address.html:Scope | Descriptionglobal | valid everywheresite | valid only within this site (IPv6)link | valid only on this devicehost | valid only inside this host (machine)范围通常由ip实用程序确定,无需在命令…

充分利用系统的组策略 保障共享目录安全

在日常的办公应用中,为了使用的方便,我们习惯于将自己电脑上的一些文档、目录共享出来,以便于别人调用。但是对于共享的文件夹常常无法做到在使用后即将其关闭,这样网络上一些别有用心的人则可能对我们的共享文件进行破坏&#xf…

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

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

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

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

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

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

微软:Vista SP2是最安全的操作系统

微软首席运行官Kevin Turner在上周末的Midmarket CIO峰会上表示,Windows Vista SP2是最安全的一款操作系统,它在安全性能方面比开源Linux和苹果的Mac OS X Leopard都要出色,不过除了这一观点外,Turner并没有详谈Vista SP2的安全措…

linux mysql帮助文档,在 Linux 上安装 MySQL

## 2.5 在 Linux 上安装 MySQLLinux 支持多种不同的 Linux 安装解决方案. We recommend that you use one of the distributions from Oracle, for which several methods for installation are available:**表 2.7 Linux 安装方法和信息**| 类型 | 设置方法 | 附加信息 ||:---…

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…

java.net.sockettimeoutexception read timed out

java.net.sockettimeoutexception read timed out超时时间设长一点儿即可Socket.setSoTimeout(int timeout); ----------------------------------------------------------------------------------------------------------------------------------------------------------…