初始ASP.NET Core(1)

2021-03-12 16:27

阅读:626

标签:iap   ransient   mamicode   rop   soft   info   控制   wait   pac   

ASP.NET Core:微软提供的跨平台(window、mac、Linux)设计模式,据我了解,在2018年中旬,Core运行效率拍在100开外,到近几年,效率提高速度堪称恐怖,目前应该是前15了。总而言之,微软还是很强大的。

今天我这里介绍的是.NET Core 3.0,目前最新应该是3.1了已经。

从创建一个.NET Core项目开始:

技术图片

 技术图片

目录组成:Core 3.0以前的版本Properties文件应该是没有显示在项目中的需要在对应的项目文件夹中查看。。。

技术图片

 技术图片

截图的时候写错了:应该是kestrel。Kestrel是一个基于libuv的跨平台web服务器,在项目发布的时候我们不一定要在iis下面进行发布。在vs2019下可以直接选择运行项目,而不适用iis,如果想要删除iis直接在此文件夹中删掉有关iis配置信息就可以了。

技术图片

 在kestrel下运行可查看窗口运行的内部信息。

技术图片

 我们也可以右键项目下的属性查看本项目的core版本以及一些常规的程序集信息

技术图片

总体文件目录接收

 技术图片

首先来看看Startup类里面的内容,这里的Startup其实就是个普通的类。它也并没有继承什么接口什么的。。。

ConfigureServices:这里主要负责依赖注入

DI(全称:Dependency Injection) 依赖注入机制依赖于IoC容器(也就是控制反转Inversion of Control)

  • IoC容器:
  • 注册
  • 请求实例--->生命周期
  • Transient:瞬时生命周期,Transient服务在每次被请求时都会被创建一个新的对象。这种生命周期比较适用于轻量级的无状态的服务
  • Scoped:Scoped生命周期的服务是每次Web请求被创建,局部单例对象,在某个局部内饰同一个对象。一次请求内是一个单例对象,多次请求则多个不同的单例对象
  • Singleton:Singleton生命能够周期服务在第一次被请求时创建,在后续的每个请求都会使用同一个实例。如果你的应用需要单例服务,推荐的做法是交给服务容器来负责单例的创建和生命周期管理,而不是自己来走这些事情

抽象-----》实现-----》注册-----》使用

在我看来,services实际上是实现了其接口 IServiceCollection,这样通过services就可以进行一个依赖注入(不知道说的对不对。。。)

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace WebApplication2
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
        }
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapGet("/", async context =>
                {
                    await context.Response.WriteAsync("Hello World!");
                });
            });
        }
    }
}

接下来看 Configure方法里面的内容。

它给了一个条件判断,意思是:如果此模式是开发模式,就执行一个中间件操作,实际上app.UserDeveloperExceptionPage();就是一个中间件。

说到中间件,就不得不扯一下管道问题,实际上当客户端请求服务器数据时,通常会经过一个管道,从管道中进来然后从管道中出去,在这一系列的过程中,当然是经过了多个中间件来判断客户端请求的参数或者是什么东东。。。那么这里的app.UserDeveloperExceptionPage() 意思是如果在请求的过程中出现问题,那么将给浏览器返回一个错误信息到一个页面page也可以看得出是这个意思没错了。感觉有点像try catch这波操作。。。进行一个异常处理。这个时候它通常是管道中的第一个中间件。一般这种模式在开发过程中进行,在项目进行发布的时候不会处于开发中模式将错误信息明确的展示给客户。。。

也可以自己定义环境变量进行配置。。。如图:右键项目,属性,debug

技术图片

然后来看第二个中间件,app.UseRouting():它是一个路由中间件。

第三个中间件 app.UseEndpoints:它是通过lambda表达式配置的端点中间件

实际上在此基础上,我们可以自己配置一个MVC的路由表中间件(将原来的注释掉)

例如:默认就是Home/Index,学过MVC的应该在熟悉不过了吧。。。

       //通过lambda表达式配置端点中间件
            app.UseEndpoints(endpoints =>
            {
                //MapGet扩展方法
                //endpoints.MapGet("/", async context =>
                //{
                //    //如果url符合的话,就执行这个操作,相应了一句话
                //    await context.Response.WriteAsync("Hello World!");
                //});

                //注册一个MVC路由模板(实际上可以注册多个):
                endpoints.MapControllerRoute(
                    name:"default",
                    pattern:"{controller=Homr}/{action=Index}/{id}"
                    );
            });

初始ASP.NET Core(1)

标签:iap   ransient   mamicode   rop   soft   info   控制   wait   pac   

原文地址:https://www.cnblogs.com/hcyesdo/p/12826361.html


评论


亲,登录后才可以留言!