ASP.NET Core 3.0 入门

时间:2019-12-09 13:58:04   收藏:0   阅读:104
原文:ASP.NET Core 3.0 入门

课程简介

一. 创建项目

1. DI 依赖注入(Dependency Injection)

2. ConfigureServices

services.AddControllersWithViews();
services.AddControllers();
// 别的类每次请求 IClock 这个接口时,都会返回一个 ChinaClock 类的实例
// services.AddSingleton<IClock, ChinaClock>();
services.AddSingleton<IClock, UtcClock>();

当需要更改接口的实现类的时候,只需要在依赖注入中修改即可。

public class HomeController: Controller
{   // 不需要更改
    public HomeController(IClock clock)
    {
    
    }
}

2.1 DI 的优点

3. Configure

3.1 ASP.NET Core 管道(pipeline)

3.2 中间件注册(顺序非常重要)

// 在开发环境中,一些没有被处理或者捕获的异常就会传到这里,展示成一个页面
if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}

// 不使用这个中间件就无法访问静态文件(HTML,JS,CSS)
// 它可以放在 UesRouting 前,因为不需要知道路由信息
app.UseStaticFiles();

// 将 HTTP 请求转换为 HTTPS 请求,强制用户使用 TLS 协议(SLL)
app.UseHttpsRedirection();

// 身份认证,必须放在 UseEndpoints 前面,因为在使用 MVC 等之前就应该完成身份认证
app.UseAuthtication();

// 路由中间件,检查在应用中已经被注册的端点,这些端点有可能是被 MVC 注册的, 也有可能是RazorPages 注册的。
// 会判断这个 HTTP 请求是在哪个端点上出现的,并把这些信息传达给后面需要用到这些信息的中间件。
app.UseRouting();

// 端点中间件,对端点进行注册
app.UseEndpoints(endpoints = >
{
    endpoints.MapGet(pattern:"/", requestDelegate:async context =>
    {
        await context.Response.WriteAsync(text: "Hello World!");
    });
    // MVC
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
    
    // Attribute:类似在Controller上加上[Route("api/[Controller]")]
    // 注意, services.AddControllers(); 和 endpoints.MapControllers(); 方法成对出现,。
    endpoints.MapControllers();
});

3.3 端点 endpoint

为什么要将 ”路由“ 从 MVC 中分离出来,配合其他中间件使用呢?

3.4 ASP.NET Core 应用的多样性

4. 自带的 Kestrel 服务器

4.1 launchSettings.json

5. 自定义 ConfigureDevelopment 方法

// 自定义 ConfigureDevelopment 方法
public void ConfigureDevelopment(IApplicationBuilder app, IWebHostEnvironment env)
{
    // ...
}

// 如果找不到自定义的 Configure 方法,就会执行默认的
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // 通过 IWebHostEnvironment 进行注入
    // 可以是 IsDevelopment(),也可以是 IsProduction(),还可以自定义 IsEnvironment("OK")
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
}

// ConfigureServices()方法也可以自定义配置,还可以对Starup 类进行自定义(例如StartupDevelopment)

6. 静态文件

二. 包管理

1. 合并 CSS 文件,并对其进行压缩

建立 bundleconfig.json 文件

[
    // 合并
    {
        "outputFileName":"wwwroot/css/all.min.css",
        "innputFiles":[
            "wwwroot/lib/bootstrap/dist/css/bootstrap.css",
            "wwwroot/css/site.css"
        ]
    },
    
    // 移动 + 压缩
    {
        "outputFileName":"wwwroot/css/bootstrap.css",
        "innputFiles":[
            "wwwroot/lib/bootstrap/dist/css/bootstrap.css"
        ],
        "minify":{
            "enabled":true
        }
    }
]

通过 Nuget 安装 BuildBundlerMinifier ,然后生成即可

三. 使用 MVC 相关技术

1. Tag Helper

添加 Razor View Imports,全局添加 Tag Helper

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

Tag Helper 设定环境

<environmet include="Development">
    <link rel="stylesheet" asp-href-include="css/*" asp-href-exclude="css/all.min.css" />
</environmet>

<environmet exinclude="Development">
    <link rel="stylesheet" asp-href-include="all.min.css" />
</environmet>

<!-- 防止图片被缓存 -->
<img asp-append-version="true" alt="Logo" src="images/logo.png" />

四. ASP.NET Core 的配置信息

1. ASP.NET Core 的配置信息源(顺序查找,相同时后面覆盖前面)

1.1 appsettings.json

{
    "Three":{
        "Threshold":30
    }
}

1.2 Startup:

private readonly IConfiguration _configuration;

public Startup(IConfiguration configuration)
{
    _configuration = configuration;
    // var three = _configuration["Three:Threshold"];
}

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<ThreeOptions>(_configuration.GetSection("Three"));
    // ...
}

1.3 Controller 配置注入

Controller:

private readonly IOptions<ThreeOptions> _threeOptions;

public HomeController(IOptions<ThreeOptions> threeOptions)
{
    _threeOptions = threeOptions;
}

Razor:

@inject IOptions<ThreeOptions> options

1.4 清除默认源

Program:

Host.ConfigureAppConfiguration((context, configBuilder) =>
                               {
                                   configBuilder.Sources.Clear();
                                   configBulider.AddJsonFile("nick.json");
                               })

五. View Component

1. View Component

ViewComponent / CompanySummaryViewComponent.cs :

public class CompanySummaryViewComponent: ViewComponent
{
    public async Task<IViewComponentResult> InvokeAsync()
    {
        // ...
        return View();
    }
}

六. Razor Page

七. SignalR

1. SignalR "底层"技术

1.1 Polling

技术分享图片

1.2 Long Polling

技术分享图片

技术分享图片

1.3 Server Sent Event(SSE)

技术分享图片

1.4 Web Socket

技术分享图片

1.4.1 Web Socket 生命周期

技术分享图片

1.4.2 HTTP 握手

技术分享图片

技术分享图片

1.4.3 消息类型

2. SignalR

3. SignalR 回落机制

技术分享图片

4. RPC

5. Hub

技术分享图片

6. 横向扩展(将应用运行在多个服务器上:负载均衡)

八. Blazor(Core3.0真正的新东西)

MVC:

技术分享图片

九. Web API

1. 使用 Attribute Route

// ConfigureService 服务注入
services.AddContollers();

// Configure 中间件
app.UseEndpoints(endpoints => { endpoints.MapControllers(); });

2. Controller 方面使用 Route ,ApiController,并且继承于ControllerBase

[Route("v1/[Controller]")]
[ApiController]
public class XXXController: ControllerBase
{
    /* 继承于ControllerBase,而不是Contoller。因为Controller也是继承于ControllerBase
       并且Controller封装了一些有关View所需的方法,这些是Api所不需要的 */
    // ....
}

3. ApiController Attribute ([ApiController] 的作用)

3.1 默认 [ApiController] 返回的是 application/json;charset=utf-8 数据

// ConfigureServices 服务注入
services.AddControllers()
        .AddXmlSerializerFormatters();

十. gRPC

1. Protocol Buffer

1.1 为什么需要gRPC ?

1.2 gRPC 能解决哪些问题 ?

1.3 再次介绍一下 gRPC

1.4 RPC 是什么 ?

服务端代码:

技术分享图片

“遥远”的客户端调用:

技术分享图片

技术分享图片

1.5 如何学习 gRPC ?

1.6 protobuf 例子

技术分享图片

原文:https://www.cnblogs.com/lonelyxmas/p/12010349.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!