[ASP.NET Core] 概述

Overview

Dependency Injection

依赖注入是实现控制反转的方式之一。DI主要负责管理对象的生命周期,从构造到销毁。

1
2
3
4
var builder = WebApplication.CreateBuilder(args);
// 服务就在这里注册
builder.Services.AddRazorPages(); // 使用扩展方法注册了razor page引擎所需的所有类型
var app = builder.Build();

Singleton

builder.Services.AddSingleton()

注入到容器中的单例对象在整个应用生命周期内都可以访问,而且只会有一个

这个方法有挺多重载,不过作用都类似,按需使用。

第一次向容器请求时构造

Transient

builder.Services.AddTransient()

每次请求容器都生成一个全新实例

Scoped

builder.Services.AddScoped()

在整个作用域当中,请求的对象是单例,不同的作用域对象是不同的。

作用域是一次Web Request

Repository Pattern

中文名 仓储模式

对标Spring的DAO层,用来解耦Contoller和数据库实现

WebApplication

ASP.NET Core应用的起点是Microsoft.AspNetCore.Builder.WebApplication,通过建造者模式创建一个WebApplication并启动

WebApplication还会读取根目录的配置文件appsettings.json

所有服务都在建造时就确定了,通过Services属性构造

Request Pipeline

用户发来的请求会经过一条管线,管线上有许多中间件(Middleware)来处理请求。中间件是可配置的,如果没有配置则不会对请求进行任何处理。

例如:

  • Routing中间件用来将请求映射(Mapping)到应用程序的某个处理部分。
  • Static Files用于获取静态资源文件,例如css、js、图片等。这些静态资源只能从项目目录的wwwroot内读取

要配置请求管线,时机是app启动前,例如模板代码中

1
2
3
4
// ... 建造模式构造了app对象
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();

中间件的添加顺序会影响执行顺序

管线的终点叫做终结点(Endpoint),进入该中间件说明用户请求走完了整个流程。

Razor

Razor是一套可内嵌C#的HTML模板引擎,类似于JSP,Razor文件扩展名是cshtml。

Razor可以创建Shared模板,用来给页面头和尾额外添加一些内容。模板放在根目录Shared文件夹下

语法

在HTML里内嵌C#代码行前要加符号"@"

如果需要代码块,则用

1
2
3
@{
// C#代码
}

的形式

Frontend Techniques

https://learn.microsoft.com/zh-cn/aspnet/core/tutorials/choose-web-ui

应该选择适合的WebUI

Razor Page

https://learn.microsoft.com/zh-cn/aspnet/core/razor-pages

直接对标JSP,交互逻辑全写在页面上

MVC

https://learn.microsoft.com/zh-cn/aspnet/core/mvc/overview

直接对标Spring MVC,相比page,把数据和视图分离了,但视图依然使用razor展示

Blazor

https://learn.microsoft.com/zh-cn/aspnet/core/blazor

直接对标…没有能对标的,类似Vue、React,使用C#作为前端框架语言

这玩意甚至分成在服务端运行和在客户端运行的前端框架

在客户端运行使用WebAssembly

在服务端运行,使用SingalR与前端通信

Backend Techniques

后端处理数据,有很多办法可以发送数据给前端

RESTful API

核心思想就是请求地址映射到行为(action)

HTTP状态码决定结果

绝大多数情况下,使用JSON作为数据的载体格式

Swagger是一套最常见的用于REST接口文档、测试的工具

有两种提供RESTful API的办法:

  • Mininal API
  • 基于DI的Controller的API

REST用于前后端交互比较多

gRPC

使用RPC(Remote Procedure Call)进行通信,调用远程函数就像调用本地函数一样,RPC底层会做好数据的序列化与传输,从而能使我们更轻松地创建分布式应用和服务。

gRPC是Google开源的RPC实现,使用Protocol序列化数据进行交互

RPC用于服务与服务间交互比较多

SignalR

https://learn.microsoft.com/zh-cn/aspnet/core/signalr/introduction

一种服务端与客户端双向通信的办法。

通过使用WebSocket、Server Send Event或者轮询实现

Kestrel

默认使用内置的Kestrel作为Web服务器,作用类似Java的Tomcat


[ASP.NET Core] 概述
https://ksgfk.github.io/2023/10/20/DotNet-Basic/
作者
ksgfk
发布于
2023年10月20日
许可协议