学习路线!!!
全部笔记:
start up :项目运行配置 管理依赖注入 中间间(configure-》Middelware) 以及处理请求通道(由IApplicationBuilder类创 建)
Program.cs-》
CreateDefaultDuilder(args)->1.加载主机和应用得配置信息
2.配置日志记录
3.设置web服务器
4.设置asp.net core的应用形式
Asp.net MVC routing系统
1.无需文件真正保存在硬盘上
2.访问文件无需后缀
3.URL结构与服务器文件夹结构无关
4.url将会被映射给Controller控制器来处理请求,不会映射给静态文件
http请求交给服务器-》controller来进行活动 之后再有controller响应http请求
URL:{域名}/Controller/Action
具体信息又分段路由segments(自定义路由)来处理
URL:{域名}/Controller/Action/{id}->action 函数的参数来进行页面处理获得数据输出
如何定义URL和Controller之间的映射规则?
默认路由系统。 app.UseMvcWithDefaultRoute();
{域名}/{Controller=Home}/{Action=index}/{Value?}
自定义默认路由:
使用中间件:
app.UseMvc(routes=>routes.MapRoute(name:"default",template:"{controller=Home}/{Action=index}/{Value?}"))
==app.UseMvcWithDefaultRoute();
在ASP.Net Mvc有两种路由模式
1.传统路由(使用路由表) Concentional routing
2.特性注释路由 Attribute routing
Conventional Routing
1.URl 被分解为Controller和action两个部分
2.使用路由表(routing table )来设置路由规则
例如:rotes.MapRoute(name:"default",templete:"{controller=Home}/{action=index}")
Atrtibute Routing:
1.使用简单,不再需要路由表,只要controller和action代码中直接使用
attribute来定义路由
Example:
[Route("[controller]/[action]")]
public class HomeController:Controller
{
//get :/<controller>/
public Stirng Index()
{
return "Hello From Home";
}
}
路由中间件:帮助我们解析URL,并映射给相对应得controller和action
//
Attribute Routing :
可以帮助我们用AOP 面向面向切面得形式可以为每一个controller甚至action
单独定义路由。Route("[controller]/[index]")
//
app.UseMvc(传入lamda表达式来设定自定义路由)
什么是MVC:
1.软件工程的架构方式
2.模型,视图和控制器
3.分离业务操作,数据显示,逻辑控制
视图:用户交互界面 展示输入,不操作数据,接受用户数据
模型:MVC架构得核心,表示业务模型或者数据模型,程序的业务逻辑。
如:算法的实现,数据的管理,输出对象的封装等等
控制器:接受用户得输入,并调用模型和视图去完成用户的请求处理
本身不处理数据
三层架构:
UI层 BLL 业务逻辑层,处理核心业务以及数据封装
DAL 表示数据访问
三层架构面向结构编程,而三个层级之间的完全解耦,完全可替代
MVC得每个部分都是紧密结合的,它的核心并不是解耦,而是重用。
MVC的优点:
耦合性低
可复用性高
可维护性高
缺点:
定义不明确,学习曲线陡
结构复杂
数据流动效率低
----控制器的工作原理--
Action 函数:
处理请求
返回特殊乐星IActionResult
默认http请求方式为Get
可接受url中的参数
Action:Post
如何处理POST请求:
[HttpPost]
public ActionResult Edit(int id,IFormCollection collection)
{
try
{
return RedirectionToAction(nameof(Index));
}
catch
{
return View();
}
}
什么是模型?
1.其实是一个类 映射数据库,对象化数据。
2.获取数据,更新数据,传递数据,保存数据等
3.处理业务逻辑,被视为BLL层
4.View Model与视图数据绑定
不过,定义不明确,经验很重要
可以是一个简单的poco类 也可以是一复杂的充血性领域模型(rich Domain Model)
模型的业务逻辑:
函数方法等,不会映射数据库,但会对数据进行更新。
举例:
模型属性:
public int Id{get;set;}
public string FirstName{get;set;}
public string UserName{get;set;}
public string ShortDescription{get;set;}
public decimal Phone{get;set;}
public string Email{get;set;}
public bool IsEmailConfirm{get;set;}
业务逻辑:
public void ConfirmEmail(string token)
{
if(isTokenValid)
{
this.IsEmailConfirm=true;//save to database
}
}
数据持久化模式:repository仓库模式
对象化数据,不用管数据是怎么保存的
使用仓库接口
举例:
public interface INoodleRespositoy
{
IEnumerable<Noodle> GetNoodles();
Noodle GetNoodleById(int ID);
}
使用模型和数据仓库的好处:
1.业务逻辑与数据模型紧密耦合,减少分层,降低代码数量
2.完全剥离数据库业务,程序员可以更专注于实现业务逻辑
3.面向对象编程,数据转化为对象,更符合程序员的思考方式
视图模型 ViewModel
ViewModel中的数据会与UI界面双向绑定,一旦ViewModel
中的数据发生任何变化,结果都会立即反应在UI界面中。
特点:
1.依然是模型
2.用视图模型替代数据上下文
3.poco(plain old class object),不包含方法的简单类
MVVM:model-view-view Model
为什么要使用ViewModel
1.减少页面逻辑的复杂度
2.处理页面的数据逻辑,管理页面状态
3.各种组件也可以相对解耦,既有利于团队协作与日后维护
管理前端框架工具:
项目名称(右击)-》client-site Library-》libman
Asp.Net Core Identity
1.Password Hashing
2.Tokenization
3.TwoFacts Authentication
4.Authentication
5.Authorization
6.External Login 第三方验证