首页 > 编程语言 >Asp-Net-Core学习笔记:4.Blazor-Server入门

Asp-Net-Core学习笔记:4.Blazor-Server入门

时间:2024-02-08 15:56:44浏览次数:31  
标签:Core Asp app Server https 服务器 Blazor 客户端

本来今天开始是有其他的安排了,也没办法抽出那么多时间来学NetCore,不过我想做事情有始有终吧,除了gRPC还没跑起来之外,Blazor这部分也了解了一点,官网地址:https://dotnet.microsoft.com/apps/aspnet/web-apps/blazor

目前来说还不是很完善,真正的离线单页应用还处于预览版阶段。

image

Blazor目前有两种运行模式,一种是服务器端部署,一种是客户端部署,后者可以完全脱离服务器,也就是标题写的WebAssembly,不过目前处于预览版(有点标题党了)。

官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/blazor/get-started?view=aspnetcore-3.1&tabs=visual-studio

项目文件结构

主要的文件夹就是这个Pages和Shared。里面包含了mvc页面(cshtml结尾)和razor组件(razor结尾)。

然后再看看wwwroot文件夹:

可以看到只有css,没有js文件夹,因为blazor要做的事情就是要把js代码换成C#代码,其实就是让后端开发去做前端开发。
(PS:node就是让前端去做后端,历史总是惊人的相似hhh)

先看看它的代码是怎么写的,后面再具体介绍。

例子代码

这是官方的例子,点击按钮之后可以计算点击次数。

image

@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++;
    }
}

我感觉项目的具体代码应该放在最后面,还是继续介绍一下原理什么的吧~

托管模型

就是前文提到的服务器和客户端两种模式。

客户端模型

Blazor 的主体宿主模型在 WebAssembly 上的浏览器中运行客户端。 将 Blazor 应用、其依赖项以及 .NET 运行时下载到浏览器。 应用将在浏览器线程中直接执行。 UI 更新和事件处理发生在同一进程中。 应用的资产将作为静态文件部署到 web 服务器或可为客户端提供静态内容的服务。

image

服务端模型

使用 Blazor 服务器托管模型,可在服务器上从 ASP.NET Core 应用中执行应用。 UI 更新、事件处理和 JavaScript 调用是通过 SignalR 连接进行处理。

image

又出现SignalR了,真的好用,关于SignalR的可以看看我上一篇:Asp.Net Core学习笔记:(三)使用SignalR实时通信框架开发聊天室

Blazor Server 宿主模型具有以下几个优点:

  • 下载大小明显小于 Blazor WebAssembly 应用,且应用加载速度快得多。
  • 应用充分利用服务器功能,包括使用任何与 .NET Core 兼容的 Api。
  • 服务器上的 .NET Core 用于运行应用程序,因此现有的 .NET 工具(如调试)可按预期方式工作。
  • 支持瘦客户端。 例如,Blazor Server apps 适用于不支持 WebAssembly 的浏览器以及资源受限设备上的浏览器。
  • 应用程序的 .NET/C#代码库(包括应用程序的组件代码)不会提供给客户端。

Blazor Server 宿主有一些缺点:

  • 通常存在较高的延迟。 每个用户交互都涉及网络跃点。
  • 无脱机支持。 如果客户端连接失败,应用将停止工作。
  • 对于包含多个用户的应用而言,可伸缩性非常困难。 服务器必须管理多个客户端连接并处理客户端状态。
  • 为应用提供服务需要 ASP.NET Core 服务器。 不可能的无服务器部署方案(例如,通过 CDN 为应用提供服务)。

项目配置

首先是从一个普通的AspNetCore项目开始,进行以下配置:

// 注册服务
public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();
    services.AddServerSideBlazor();
    services.AddSingleton<WeatherForecastService>();
}

// 配置中间件
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        // 配置生产环境的错误页面
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseStaticFiles();
    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        // 相当于一个Blazor版的SignalR
        endpoints.MapBlazorHub();
        endpoints.MapFallbackToPage("/_Host");
    });
}

编写Razor组件

Blazor从名字看就和AspNetCore原有的Razor相似,所以他们俩的很多语法是接近的,比如说TagHelper。

先写App.razor

<Router AppAssembly="@typeof(Program).Assembly">
    <Found Context="routeData">
        <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
    </Found>
    <NotFound>
        <LayoutView Layout="@typeof(MainLayout)">
            <p>Sorry, there's nothing at this address.</p>
        </LayoutView>
    </NotFound>
</Router>

之前在中间件那里配置了endpoints.MapFallbackToPage("/_Host");,可以理解为默认页面吧。

内容如下:

@page "/"
@namespace BlazorOne.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{
    Layout = null;
}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>BlazorOne</title>
    <base href="~/" />
    <link rel="stylesheet" href="css/bootstrap/bootstrap.min.css" />
    <link href="css/site.css" rel="stylesheet" />
</head>
<body>
    <app>
        <component type="typeof(App)" render-mode="ServerPrerendered" />
    </app>

    <div id="blazor-error-ui">
        <environment include="Staging,Production">
            An error has occurred. This application may no longer respond until reloaded.
        </environment>
        <environment include="Development">
            An unhandled exception has occurred. See browser dev tools for details.
        </environment>
        <a href="" class="reload">Reload</a>
        <a class="dismiss">

标签:Core,Asp,app,Server,https,服务器,Blazor,客户端
From: https://www.cnblogs.com/deali/p/18011840

相关文章

  • Asp-Net-Core学习笔记:5.构建和部署
    从上次开始学习Asp.NetCore以来,一直都是玩一玩,还没有什么机会用来实战,最近单位有个新的小项目,于是我用Asp.NetCore来尝尝新,结果也是非常OK,熟悉之后开发效率感觉和Django基本没差。那么进入正题,本文简单说说Asp.NetCore应用的构建和部署。构建构建是使用build命令,不过一般我......
  • Asp-Net-Core学习笔记:WebApi开发实践
    前言用AspNetCore做Api开发也有一段时间了,正好年底在做总结,做一个WebApi开发实践笔记。暂时想到的一些技术关键词,同时也作为本文的大纲,现在对这套技术体系的了解还不够深入,以后会持续更新这个Api开发实践~身份认证:JwtBearer分页:X.PagedList缓存ResponseCacheRedis:St......
  • Asp-Net-Core学习笔记:3.使用SignalR实时通信框架开发聊天室
    SignalR牛刀小试在MVP杨老师的博客里看到这么个东西,我还以为是NetCore3才推出的新玩意,原来是已经有很多年的历史了,那看来还是比较成熟的一个技术了。简介SignalR是一个.NETCore/.NETFramework的开源实时框架,SignalR的可使用WebSocket,ServerSentEvents和LongPolling......
  • Asp-Net-Core学习笔记:部署,早知道,还是docker,以及一点碎碎念
    前言AspNetCore技术栈在我们团队里的使用也有一段时间了,之前的部署方式一直是本地编译之后上传可执行文件到服务器,使用supervisor来管理进程这种很原始的方式。参考之前的文章:对于小项目来说尚可,够用,但是存在几个问题:每次更新花费的时间太长了,无论是Framework-Dependent还是S......
  • 分布式事务(七):Seata-Server的搭建
    1、Seata-Server下载官方文档地址:https://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html。下载地址:https://github.com/seata/seata/releases,这里下载的是1.5.1版本,seata-server-1.5.1.tar.gz。 解压文件目录如下 2、注册中心配置Seata支持的注......
  • Asp .Net Core 系列:Asp .Net Core 集成 Panda.DynamicWebApi
    目录简介Asp.NetCore集成Panda.DynamicWebApi配置原理什么是POCOController?POCO控制器原理ControllerFeatureProvider实现自定义判断规则IApplicationModelConventionPanda.DynamicWebApi中的实现ConfigureApiExplorer()ConfigureSelector()ConfigureParameters()简介Panda......
  • DataSpell 2023:专注于数据,加速您的数据科学之旅 mac/win版
    JetBrainsDataSpell2023是一款专为数据科学家和数据分析师设计的集成开发环境(IDE)。这款IDE提供了强大的数据分析和可视化工具,旨在帮助用户更快速、更高效地进行数据科学工作。→→↓↓载DataSpell2023mac/win版 DataSpell2023在保持其一贯的数据处理、数据清洗、数据探......
  • Linux下gdb如何调试coredump文件
    目录简介示例简介在Linux下,你可以使用GNU调试器(GDB)来调试coredump文件。Coredump文件是在程序崩溃时由操作系统生成的,它包含了程序崩溃时的内存内容、寄存器状态和其他相关信息。下面是在Linux下使用GDB调试coredump文件的步骤:确保你的系统已经安装了GDB。如果没有安装,你......
  • 使用IDEA直接连接数据库报错:Server returns invalid timezone. Go to 'Advanced' tab
    错误详情:使用IDEA直接连接数据库报错:Serverreturnsinvalidtimezone.Goto'Advanced'tabandset'serverTimezone'propertymanually.错误原因:MySQL驱动中默认时区是UTC,与本地时间有时差。解决方案:点开最右侧导航栏Advanced,找到serverTimezone,在value处填写GMT保存再......
  • geoserver在linux上乱码
     windows下部署的中文正常,迁移到linux上后,出现中文乱码,后排查出是缺少中文字体。上传中文字体上传前可用字体 1.首先输入以下命令安装字体软件:yuminstall-yfontconfigmkfontscale2.然后创建存放字体库的文件夹:mkdir/usr/share/fonts/chinese&&cd/usr/share/fon......