Blazor —— 教你从零搭建 Blazor for Server-Side 项目

前言

这篇文章不会介绍什么是 Blazor,若想理解基本概念,请自行百度或查看微软官方文档。这篇文章是偏向技术的,也就是说它不是概念,而是教你从零开始搭建一个 Blazor 项目,前提是你必须先掌握 ASP.NET CORE 的基本知识

学习Blazor的前提知识点

  • ASP.NET CORE 的基本概念
  • Razor Page 的基本概念
  • 依赖注入的知识

言归正传

Blazor 是属于 ASP.NET CORE 3.0 体系下的又一套框架,所以你第一件事要做的就是下载 ASP.NET CORE 3.0 SDK 环境。而且仅支持 Visual Studio 2019 的版本,如果没有的话,出门右转。

小伙伴们一定要转变一个思维:

Blazor 是使用 C# 语言来进行客户端开发的框架。

和 React / Vue / Angular 这些客户端框架一样,是用来做前端的。具体怎么实现的,大家自己去看文档吧。

从零开始

请记住:这篇教程是从零开始,而不是从一个 Blazor 模版开始。

在这里插入图片描述
而是使用
在这里插入图片描述

1. 创建一个空的解决方案

在这里插入图片描述

然后为这个解决方案创建一个空项目或者一个控制台项目
在这里插入图片描述
创建完成后,只有一个 Program.cs
在这里插入图片描述

2.修改项目文件

  • 修改项目文件【直接点击项目,或使用右键->编辑项目文件】在这里插入图片描述
    然后会看到如下显示代码:
    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.0</TargetFramework>
      </PropertyGroup>
    
    </Project>
    
  • 修改节点【Project】的 SDK 值为【Microsoft.NET.Sdk.Web】,表示使用的是 Web 项目。
    <Project Sdk="Microsoft.NET.Sdk.Web">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.0</TargetFramework>
      </PropertyGroup>
    </Project>
    

3. 添加 Startup.cs 类

 public class Startup
 {
     public void Configure(IApplicationBuilder app)
     {
         throw new NotImplementedException();
     }

     public void ConfigureServices(IServiceCollection services)
     {
         throw new NotImplementedException();
     }
 }

4.修改 Program.cs 类

 class Program
 {
     static void Main(string[] args)
     {
         CreateHostBuilder(args).Build().Start();
     }

     static IHostBuilder CreateHostBuilder(string[] args)
         => Host.CreateDefaultBuilder(args)
         .ConfigureWebHostDefaults(configure =>
         {
             configure.UseStartup<Startup>();
         });
 }

对比一下 ASP.NET CORE 2.2 的写法

 public class Program
 {
     public static void Main(string[] args)
     {
         CreateWebHostBuilder(args).Build().Run();
     }

     public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
         WebHost.CreateDefaultBuilder(args)
             .UseStartup<Startup>();
 }
大致猜测

3.0 将 Host 抽象出来,可能是为了更好的兼容 Winform 和 WPF,也有可能是为了下一代的跨平台 App 做准备,因此他们托管的不一定就是 WebHost,可以是其他容器。

5. 修改 Starup.cs 的代码

 public class Startup
 {
     public void ConfigureServices(IServiceCollection services)
     {
         services.AddRazorPages(); 
         services.AddServerSideBlazor(); 
     }
     
     public void Configure(IApplicationBuilder app)
     {
         app.UseStaticFiles(); //必须要有
         app.UseRouting();
         app.UseEndpoints(configure =>
         {
             configure.MapBlazorHub(); 
             configure.MapFallbackToPage("/_Host");
         });
     }
 }

在3.0中,映射路由的中间件代码,从原来的 app.UseMvc() 改为使用了 app.Endpoints() 终结点模式。相关3.0的迁移改动请移步微软官方迁移文档

  • app.MapBlazorHub()
    添加 Singlr 对 Blazor 的路由机制。
  • app.MapFallbackToPage()
    这是一个失败处理的路由,如果路由匹配失败,则跳转到该页面。

6. 添加一个 _Host.cshtml 页面

Razor Page 默认是在 Pages 文件夹下。
在这里插入图片描述
代码如下:

@page "/"
@addTagHelper *,Microsoft.AspNetCore.Mvc.TagHelpers

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <base href="~/" />
</head>
<body>
    <script type="text/javascript" src="_framework/blazor.server.js"></script>
</body>
</html>
注意事项
  • @page 标记一定要有,而且是“/”,表示根目录。
  • @addTagHelper *,Microsoft.AspNetCore.Mvc.TagHelpers 必须要有
  • <head></head> 中,一定要有 <base href="~/" /> 这段代码。
  • 在底部必须有 <script type="text/javascript" src="_framework/blazor.server.js"></script> 代码,这个 js 是内置的,路径和名字就得原封不动是这个。

7. 在 Pages 外面添加一个 _Imports.razor 组件

_Imports.razor 组件是用来导入全局命名空间的,相当于 using 命名空间,否则就得在每一个 razor 组件中自己引用命名空间。

默认会有以下命名空间:

@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Web
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.JSInterop

需要其他的,自行添加。

8. 添加 App.razor 组件

该组件是一个基本路由组件,用来呈现 SPA(Single Page Application)的单页面容器。(学过前端的应该都懂这个基本概念吧。)

<Router AppAssembly="typeof(Program).Assembly">
    <Found Context="routeData">
        <RouteView RouteData="routeData"></RouteView>
    </Found>
    <NotFound>
        <h2>抱歉!找不到页面。</h2>
    </NotFound>
</Router>
  • Router 组件,位于 Microsoft.AspNetCore.Components.Routing 命名空间。
    • AppAssembly 是必填的,要指定一个路由所在的程序集。因此你可以有多个不同的路由形式。
  • Found 组件,当找到页面了显示的内容区域。
    • Coontext 是必填的,声明一个变量。
    • RouterView 组件,顾名思义就是显示的视图容器,RouteData 属性要求必填,使用 Found 组件 声明的 Context 的变量即可。
  • NotFound 组件 当然就是找不到视图要显示的内容了。

9. 修改 _Host.cshtml 页面

@page "/"
@addTagHelper *,Microsoft.AspNetCore.Mvc.TagHelpers

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <base href="/" />
</head>
<body>
    @(await Html.RenderComponentAsync<BlazorApp.App>(RenderMode.ServerPrerendered))
    <script type="text/javascript" src="_framework/blazor.server.js"></script>
</body>
</html>

在 body 内部增加了一段代码,用于呈现某个组件:@(await Html.RenderComponentAsync<BlazorApp.App>(RenderMode.ServerPrerendered))

10. 最后,你可以新建一个 Index.razor 来显示首页

在这里插入图片描述

@page "/"

<h1>这里是首页</h1>

然后运行你的项目吧!!准备好雀跃一番_

在这里插入图片描述

恭喜你完成了第一个 Blazor App 的搭建

现在你学会了 Blazor Server-Side 从零开始搭建的技能,所以接下来可以趁热打铁,开始搭建属于自己的应用程序咯。

  • 10
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我 Teacher 周

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值