ASP.Net Core 2.2 MVC入门到基本使用系列 (三)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力.
本教程知识点大体分为以下几个阶段
- ASP.Net Core MVC基础知识
- Startup基本配置和理解
- Controller使用
- Razor视图
- 传统视图
- Model Validation (基本用法)
- 一点点的Vue (教程使用Vue配合)
- SqlSugar ORM (进行数据库交互)
- Entity Framework Core(基本介绍使用)
- 授权和身份验证(MVC的, WebApi的不进行介绍)
- 安全性
- 测试 / 单元测试
- 性能基本优化
- 日志功能
- CI/CD
- Windows部署
- Linux部署
想必大家都知道ASP.Net Core MVC默认自带了DI容器的, 我们可以很方便的进行使用, 来方便管理对象和生命周期, 那么这一节我就会详细讲解服务注册, 顺便简单讲解一下管道, 让大家知道了基本的MVC运行流程.
回顾一下上一节的内容, 我们从配置文件中获取了输出的字符, 也介绍各个配置的 "优先级" (其实是配置覆盖), 那么我们这一节以服务的方式输出这个字符串, 然后用过DI进行注册服务, 快速了解服务注册.
DI容器呢, 依赖接口, 所以我们先新建一个接口, 就叫 IWelcome , 接口里面定义个方法, 叫GetWelcomMsg, 然后再建个类, 实现这个接口, 这样, 我们的一个最基本的服务就做好了. 代码结构和代码如下图 (我建了个文件夹, 存放这些服务):



代码编写完之后, 我们尝试在Configure方法里面注入引用这个接口, 因为我们获取配置信息的时候也是直接在这个方法里面注入使用的, 那我们来试试, 代码如下图 :

一切都很正常, 方法也能调用, 我们跑起来试试看, 能不能正常使用.
一点都不意外, 它报错了, 报错信息如下图 :

意思就是无法解析IWelcome这个服务, 也是就无法注入这个服务.
那么为什么 IConfiguration, IHostingEnvironment, IApplicationBuilder等等之类的接口, 我们能直接注入使用呢, 那是ASP.Net Core MVC里面的源包里面, 已经自动为我们注册好了这几个服务, 我们直接可以使用. 我们要使用自定义的服务或者组件, 需要我们自己进行注册.
说到自定义服务注册, 就不得不说服务注册的几种方式, 或者说是几种不同的注册方法. 总共分为三种, 也就是三个注册服务的方法.
我们看看 Startup 这个类, 会发现它里面有个ConfigureServices方法, 看名字就知道, 它是配置服务用的, 有个IServiceCollection接口参数, 这个接口就是.Net Core默认提供的DI服务的接口管理对象, 我们所有注册的服务都可以通过这个接口进行管理或操作. 如果使用第三方包, 如Autofac另说, 这里不介绍Autofac的使用.
那么我们就可以通过IServiceCollection接口进行我们自定义服务的注册了, 上面提到了有三个注册服务的方法, 分别是 :
1. AddSingleton (单例模式注册服务, 也就是在整个应用程序中, 只会创建一个接口对象, 所有的请求都会使用这个接口对象, 可能会有并发问题)
2. AddTransient (管道机制注册服务. 也是在每个请求发生的时候, 都会创建一个接口对象, 给当前请求使用)
3. AddScoped (会话机制注册服务. 也就是在当前会话中, 只会创建一个接口对象. 什么是一个会话, 可以简单理解为当前浏览器打开到关闭, 这个过程就是一整个会话的过程)
那么这里, 我们先使用AddSingleton单例模式注册服务, 代码如下 :
services.AddSingleton<IWelcome, Welcome.Services.Welcome>();
上面提到的三个方法, 使用方式都一样, 都是两个泛型参数, 第一个泛型参数是接口, 第二个是泛型参数是接口实现类.
那么再运行一个我们的程序, 可以看到浏览器正常输出我们的字符串了.
至于上面三个不同生命周期的注册方法, 怎么使用, 看服务的用途, 一般我推荐使用AddScoped注册服务
到这里, 我们一个简单的服务就从定义到实现到注册到使用就完成了. 是不是很简单呢.
下面我们简单讲讲ASP.Net Core MVC的管道
这里我只会简单讲解ASP.Net Core MVC的管道运行流程, 不会讲解从监听端口到转发到ASP.Net Core MVC里面是怎么实现的
比如我们现在发起一个Get请求, 在MVC收到这个请求的时候, 我们的管道流程就开始运行了, 它会最先触发Logger这个中间件, 就是日志中间件, 这个中间件里面可以获取很多信息, 比如请求头部信息, 参数信息等等, 甚至我们可以对这些信息进行修改. 这些信息也会在控制台输出, 如果用的是dotnet run命令运行这个MVC程序的话, 这里不放截图了, 你们可以自己试试
在日志中间件执行完之后, 就会执行其它的中间件, 如果我们启用了其它的中间件. 比如我们启用了身份验证中间件, 那么在日志中间件执行完成之后, 就会执行身份验证中间件, 进行身份验证, 如果验证成功了, 继续下一步处理, 如果验证失败了, 就做其它处理, 比如重定向到登录页面等等.
在这一步执行完成之后, MVC管道就会进入路由匹配的过程. 如果匹配成了, 就正常返回HTML或JSON或XML数据等等, 如果匹配失败了, 就404错误等等.
这就是ASP.Net Core MVC管道的一个基本流程, 其实里面做的事情远远不止这些, 这里就不做深入的讲解, 如果有需要, 自行学习. 因为讲一个真正的管道机制, 一下子也讲不完. 这里的目的只是要大家基本了解ASP.Net Core MVC的基本运行流程.
到这里, 这一节的内容就结束了. 上面提到了中间件这个东西, 那下一节我们就讲究什么是中间件, 怎么使用中间件.
如果在使用.Net Core遇到任何问题, 都加群进行讨论, 群号: 1群: 225982985. 2群: 726648662. 3群: 654015377
上一篇: ASP.Net Core 2.2 MVC入门到基本使用系列 (二)
下一篇: ASP.Net Core 2.2 MVC入门到基本使用系列 (四)
ASP.Net Core 2.2 MVC入门到基本使用系列 (三)的更多相关文章
- ASP.Net Core 2.2 MVC入门到基本使用系列 (三)(转)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- ASP.Net Core 2.2 MVC入门到基本使用系列 (二)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- ASP.Net Core 2.2 MVC入门到基本使用系列 (四)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- ASP.Net Core 2.2 MVC入门到基本使用系列 (一)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- ASP.Net Core 2.2 MVC入门到基本使用系列 (四)(转)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- ASP.Net Core 2.2 MVC入门到基本使用系列 (二)(转)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- ASP.Net Core 2.2 MVC入门到基本使用系列 (一)(转)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- ASP.NET Core 2.0 MVC项目实战
一.前言 毕业后入职现在的公司快有一个月了,公司主要的产品用的是C/S架构,再加上自己现在还在学习维护很老的delphi项目,还是有很多不情愿的.之前实习时主要是做.NET的B/S架构的项目,主要还是 ...
- 《ASP.NET Core项目开发实战入门》带你走进ASP.NET Core开发
<ASP.NET Core项目开发实战入门>从基础到实际项目开发部署带你走进ASP.NET Core开发. ASP.NET Core项目开发实战入门是基于ASP.NET Core 3.1 ...
随机推荐
- httplib:AttributeError: 'module' object has no attribute 'HTTPConnection'
# -*-coding:gb2312-*- #Function:学习python的httplib模块 import httplib conn = httplib.HTTPConnection(&quo ...
- iOS - 上架的APP 生成二维码下载
1.首先打开苹果App Store商店进入到里面,找到需要打开链接地址的应用程序,例如:百度. 2. 在App Store商店里面先点击一下应用程序图标,再按一下…分享按钮. 3. 接着选择分享APP ...
- session以及分布式服务器session共享
一.session的本质 http协议是无状态的,即你连续访问某个网页100次和访问1次对服务器来说是没有区别对待的,因为它记不住你. 那么,在一些场合,确实需要服务器记住当前用户怎么办?比如用户登录 ...
- Linux中chown、chmod、chgrp
1.chgrp (转变文件所属用户组) chgrp(转变文件所属用户组)change group chgrp 用户组 文件名 ###便是这个格了.若是整个目次下的都改,则加-R参数用于递归. 如:ch ...
- viewstamp replication: A new primary copy method to support highly-avaliable d
为了提高服务能力或者服务稳定,往往需要把数据重复布署,也就是replication.重复带来的问题是,更新的时候会带来不一致.一种比较简单的方法是,在N台重复的机器里选一台作为主机,其他作备份,只能通 ...
- MVC加载部分视图Partial
加载部分视图的方法:Partial() .RenderPartial() . Action() .RenderAction() . RenderPage() partial 与 RenderParti ...
- db2表空间及日志文件调整
1.SQLState '57011' and errorCode '-964' 原因:数据库的日志文件已满 解决方法:修改日志文件大小(加大),增加日志文件个数,增加辅助日志文件个数(三个修改参数 ...
- PAT 1062 最简分数(20)(代码+思路)
1062 最简分数(20 分) 一个分数一般写成两个整数相除的形式:N/M,其中 M 不为0.最简分数是指分子和分母没有公约数的分数表示形式. 现给定两个不相等的正分数 N1/M1 和 N ...
- Ubuntu的人性化配置
1.更改Ubuntu命令行提示符颜色,在~/.bashrc中添加如下命令行: PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[ ...
- Codeforces 595B. Pasha and Phone 容斥
B. Pasha and Phone time limit per test 1 second memory limit per test 256 megabytes input standard i ...