1 简介
《c#Asp.net基础入门到进阶实战培训视频教程》
地址:https://www.bilibili.com/video/av11473628?from=search&seid=16422250003233680687
1,MVC最早1978年提出,是软件工程中的一种软件(分工)架构模式,这时距离微软1985年推出窗口化系统还有7年,当时输入,逻辑控制,输出都是由软件开发者实现。原先的MVC只是在项目中进行更好的人员分工
-
控制器 : 接受用户的输入,调用模型计算 进行展示
当时人员需要自己去做电路板,根据高电平去实现信号的输入,这部分交给擅长输入系统的的人去做 -
模型:业务处理
信号采集完成后,需要对这些输入信号进行加工处理,这部分交给了擅长数学运算的人去做
现在我们在进想信息的处理,好像感受不到和数学的关系,但是底层的代码都是数学公式,只是底层封装的很严,大家可能感受不到,底层都是数学,基于做的东西不同,底层的数学的方向也不同,数学也分很多种:比如微积分,线性代数,概率论之类的。 -
视图:展示结果
数据加工完成后,这些信号需要实现屏幕的显示,这部分交给了擅长将信号进行显示的人去做
当时,电脑的输入系统,逻辑运算,显示系统都是需要开发者去实现;而现在输入系统和显示系统都已经有了标准实现,固定下来了,比如键盘鼠标输入,显示屏输出;开发者则不需要考虑怎么获得数据,怎么显示数据,开发者只需要考虑怎么最数据的加工和处理,也就是原先MVC中的M层;
最早提出的MVC思想,也就是分工开发的思想在现在的软件开发中不适用了,但是曾经提出的分工开发的思想还是在被沿用,后来提出了存开发层面的架构:三层:UIL,BLL,DAL,本身这3个层和MVC一点关系没有,但是沿用了MVC的思想
原先的MVC是每个人专注于自己擅长的部分进行工作,而现在的三层有横向:每组人负责一层;纵向开发:每组人负责一个功能的开发,比如登录模块的开发;
从原先的MVC角度看现在,三层其实都属于数据的加工和处理,而不属于输入和输出了。三层其实在开沿用分工开发的思想,和最早的MVC的三层的划分完全不一样,原先的MVC对输入,处理,输出;但是现在输入和输出已经统一了,我们只需关心所谓的逻辑处理,在逻辑处理时,我们又分了三层,三层更好的组织人员的开发,更重要的是它也更加降低了程序的耦合度!
那么Asp.net MVC是什么呢?
Asp.net是微软2009年对外公布的第一个开源的表示层框架,也是微软第一个开源项目
微软在遵循MVC的思想下,提出的一款产品,它的级别是WebForm一个级别,属于两种开发web的方式,但是这个MVC也不是最早的MVC了,由于现在输入输出都已经标准化了,现在的MVC是将最早原先的MVC中的Model层(逻辑处理层)再进行划分
Asp.net MVC只是负责UI层的一个技术,从三层角度来讲,它就是负责三层架构中的UIL的一种框架技术,它负责不了BLL和DAL。对UI层做了划分!
1,四类过滤器:
身份验证过滤器-AuthorizrAttribute 特性[MAX = 18]
异常过滤器 HandleErrorAttribute
行为过滤器 ActionFilterAttribute,分为行为前,执行后
结果过滤器 ActionFilterAttribute,分为结果执行前,执行后。
2 控制器/行为/视图/路由/Razor
1,Asp.net(Asp.net webform) & Asp.net MVC
2,创建一个在Controller控制层中添加控制器
1 Controller中添加一个XXXController
2 Class XXXController:Controller ,并在类中添加方法,一般称为Action(行为)
3 public ActionResult Index()
{
return View()//添加视图,视图引擎一般选择Razor(操作系统对显卡的调用方式在逐步变迁)
,在View层会初自动生成XXX->Index.cshtml
}
4 在MVC中,访问时,实际访问的是某个类的某个方法,在asp.net中访问时,实际访问的是某个类
1当我们访问
localhost:1504/XXX/index
时
2 根据XXX会去找到相应的Controller
3 继而找到Index方法
4 执行Index()时,在函数末端会return View(),未指定具体的View时,会找行为同名的view,放到response里,返回到浏览器,浏览器接受返回的内容进行渲染。
当return view(“YYY”),寻找view页面YYY,
页面可以重用,Action和View页面实现解偶
5,当我们访问localhost:1504/XXX/index
时,为什么xxx会被认为类,index被认为行为?
1 路由规则
2Global.asax.cs
中的Application_Start()
:RegisterRoute
3 url:路由规则{controller}/{action}/{id}
6,Asp.netwebform 和 Asp.net MVC 区别
1 开发方式对比
Web Pages(最早时候,单页面模型开发)
MVC (模型视图控制器)
Web Forms(事件驱动模型)
2 MVC本质是将原来的webforms中的codebehide代码进行了分离,分离到两个文件中即控制器,视图。
控制器, 行为 ,视图, 路由 各部分详解
1 View详解
1 Razor视图引擎:推荐使用
2 HtmlHelper:帮助更好的去使用Razor
3 强类型页面:让我们搭建view更加方便,可以在编写阶段就可以进行代码有效性检查
1,1 Razor试图引擎
1 强大的@:表示使用c#代码 c#和html混编
@{
int a1 = 10;//a1是全局的,相当于类里面的成员
Response.Write(a1); //将值放进Response里进行输出
}
@a1 //直接完成输出功能
@a1<br/>123
//当遇到<br/>这种html标签,c#代码处理停止,后面的都是html代码
@for(int i = 0;i < 10;i++)
{
if(i % 2 == 0)////i是在for代码块里面的,局部变量
{
@ i<br/>a2;
//输出需要@
//同时当遇到<br/>这种html标签,c#代码处理停止,但是在{ }内比较特殊;{ } 内只要不是html标签</>都是c#代码;
}
}
if(i % 2 == 0)
{
@ i<h1>123@a2<h1>a1;//{ }内在</>使用@继续输出c#代码
}
@*服务端注释*@
当服务端发现这段代码的时候,这段代码不会被执行,也不会放到输出流中
<!--客户端注释-->
当服务端发现这段代码的时候,这段代码不会被执行,但会放到输出流中 ,客户端会看到
@a1 输出时不需要加 " ; "
但是如果执行c#代码时,需要加" ; “,但是如果是语法中末尾的” ; " 可以省去
using namespace
1,2 HtmlHelper…
3 HtmlHelp/控制器/行为/路由规则/Global文件/异步/效验/区域Areas
1 HtmlHelp
1,@Html.ActionLink(“超链接名”,“行为名”,“控制器名”)
根据路由规则返回超链接地址
2,@Html.Raw(“1”) 在页面中输出1
3,@Html.Encode(x) 编码操作
4,@Html.TextBox(“name”)表单类型的控件
5,表单搭建,@using ,但没有submit按钮表单控件,需要自己手写
2 数据来源于行为,行为做好数据后,交给view去渲染
行为 : ViewData[“键值”] = “123” or ViewBag.键值 = “123” 也可以传对象
View : @ViewData[“键值”]
控制器中行为向view传值
**3 强类型页面 **
@model namespace class 强类型在编写时就会检查错误,页面变成强类型后,页面就只能操作一种类型的对象,主要是表单操作
@Html.TextBoxFor(c=>c.XX) @Htm.***For方法,c表示制定类型的对象 ,xx表示制定类型对象的属性
如果我们页面中就要访问多个类型怎么办?
封装,在类里面在多加几个类 类型成员
ViewData.Model = new Person() Person必须是页面强开类型,如果要传其他的类型 那就用key值传
@viewData.Model.merber
4 扩展方法
public static class Test
{
public static void test(this Person person,int x,string y)
{
...
person.member;
...
}
}
Expression<Func<Person,string>> expression
//委托类型的表达式,当函数传参需要这样一个表达式时,我们就直接写一个lambda表达式,lambda表达式会对应着一个委托对象,委托对象经过封装转换成Expression对象:expression
控制器&&行为
行为的本质就是成员方法,但是行为需要ActionResult返回值,如果Void,则路由导航该行为后什么都看不到
Public ActionResult Index()//ActionResult是一个抽象类
{
return View();//返回的是该抽象类的派生类对象
}
还有其他的派生类
Content:返回字符串,
Redirect:跳转其他行为 return Redirect(url.Action(“行为”,“控制器”))
JsonResult:序列化
https://www.cnblogs.com/stalwart/archive/2010/06/25/1765172.html
行为传值
1,第一种方式,Request[“键”]的方式接受参数 几乎不用
2,第二种方式,自动装配 利用特性重载 在控制器中的函数重载需要考虑请求类型的不同 [HttpPost] [HttpGet] (默认接受Get请求)
2019-04-04 continue
控制器,行为:
数据的传递与接收
传递:支持get、post方式传递 ,路由规则传数
接收:Request[“键”],自动装配
路由Route 决定了我们以什么方式进行资源的请求
路由规则Route
路由数据RouteData 当前请求上下文匹配路由规则而得到的一个对象
路由集合RouteCollection 存放路由规则的集合 ,一个MVC项目中可以存放多个路由规则,按照键值对的格式存储到路由集合中
路由表RouteTable 类中包含了静态RouteCollection属性,完成所有路由规则的全局储存,在Global中完成注册
Global文件
routes.MapRoute()
public sub(string name,int age,string sex){}
public main()
{
sub(age:18,name:"jay",sex:"man");//我们通过这种写法,可以打乱形参赋值的顺序,也更加直观
}
自定义路由规则
路由规则默认值,
路由规则传值,
路由规则集合顺序,
路由规则正则,
路由规则调试
异步
MVC使用异步请求
方式1, 使用jquery的异步方法
方式2, 使用MVC的AjaxHelper(本质还是使用jquery,封装了而已)
行为的返回值
返回纯文本使用content(“”)
如果返回Json对象,使用Json(obj,Allow)
效验
引入Jquery 脚本
内置验证特性(.NET框架中System.ComponentModel.DataAnnotation命名空间包含了众多可用的内置验证特性,用于修饰属性,常用的四个如下:)[Required]
[StringLength]
[Range]
[ReqularExpression]
属性ErrorMessage:指定错误提示信息
public class Person
{
[Required(ErroeMessage = "年龄不能为空")]
[Range(10,100,ErroeMessage = "范围需要是10~100")]
public int age{get;set;}
}
区域Areas
添加区域Project
将大项目的内容进行更好的管理,本质:就是个文件夹
注意:区域的路由规则注册(本身代码以及帮我们写好了,但是我们需要注意这一点)
后续需要对HTTP协议有所了解
4 过滤器/模板页/Web API
过滤器 Filter
过滤类型:
Authorization
Action
Result
Exception
两种方法
定义一个类,去继承相应的类 或者接口, 重写OnAuthorization方法 ,该方法内的内容就是过滤器的内容,会被执行
在控制器中,重写OnAuthorization方法 ,该控制器的所有行为都会执行该过滤器,
推荐使用特性的方式加过滤器,比较好灵活的控制过滤器,并且特性可以加很多个,可以在行为上加很多个过滤器
特性使用方法
上面要是继承接口的话,需要让类实现FitterAttribute,才可以作为特性适用
特性加在Controller类上方或者Action上方
在Global中注册为全局过滤器,应用于所有的Controller的Action
参数类均继承自ControllerContext,主要包含属性请求上下文,路由数据,结果
[MyAuthorization] //先执行过滤器
public ActionResult Index()//再执行行为
{
return View()
}
异常处理过滤器
override Onexception ,不可删除base.onException(),这是捕获异常的方法
throw使用处理
行为过滤器
重写方法OnActionExecuting(行为执行前)
重写方法OnActionExecuted(行为执行后)
结果过滤器
重写方法OnResultExecuting(结果执行前需要处理)
重写方法OnResultExecuted(结果执行后需要处理)
行为过滤器&结果过滤器&行为&视图 四者的执行顺序
1 OnActionExecuting() 行为执行前
2 Action() 行为执行
3 OnActionExecuted() 行为执行后
4 OnResultExecuting 结果执行前
5 View() 视图渲染
6 OnResultExecuted结果执行后
模板页
Web API
-
Web API 是一个服务,在mvc4之后提供的一种新的服务
-
两种web服务
SOAP风格:基于方法,产品是WebService :直接访问方法
REST风格:基于资源,不局限于方法,产品是WebAPI :根据请求的url和请求方式type来决定某种资源操作
-
可以返回json,xaml类型的数据
-
(对应着数据库的基本操作的增删改查)Web API提供相对资源的操作,按照请求的类型进行相应的处理,主要包括Get(查)(2个Get方法),Post(增),Put(改) ,Delete(删),这些都是HTPP协议支持的请求方式
-
添加控制器->包含读写的API控制器
-
web api 针对资源的增删改查,针对数据操作层面的;web service针对方法访问,逻辑处理;两种都属于web服务,web服务相对于本地而言,处于网络中的一种服务。
-
web api使用方法
jquery的ajax,ajax 和 webapi 需要在同一个ip下,不支持跨域访问
HttpClient ,HttpClient 和 web API不需要同一个ip,支持远程访问