[MSDN]ASP.NET MVC2(8)Controller高级教程
说明:本内容来自微软的webcast,讲师为苏鹏。视频没有书方便(想看哪页就看哪页),所以抄录要点和老师语录。
内容介绍
- Action调用与属性
同步、异步,属性
预备知识
- 安装VS2010
- 了解ASP.NET
- 了解设计模式基本概念
唤起Action
- ControllerActionInvoker
Acton匹配到URL
- 从url中匹配Action名称
找到Action 名字
找到Action 对应的函数
Action选择方法
- 不允许有NonActionAttribute标记
- 构造函数,属性控制器,事件访问器不能作为指定的action方法
- 继承自object的方法或者继承自controller的方法
名字找到了,但是没有结果返回,通常上面三种情况.
ActionNameAttribute
给函数取个别名
ActionSelectorAttribute
把匹配的函数名字一一验证
AcceptVerbsAttribute
http请求方式get or post
模拟Rest请求
HttpPostArribute create
HttpPutAttribute update
HttpGetAttribute read
HttpDeleteAttribute delete
通过CRUD可以通过URL完成了。
Rest架构,可以方便进行CRUD操作。
映射参数
从页面提交的内容,post方式
Route拆url方式
调用Action
- 使用异步调用Action
可以使用异步的controller
响应请求的线程和处理工作的线程。
同步与异步的比较
Filter可以工作在Action之前。
编写异步Action
注意:
1 继承。异步controller——AsyncController,意味mvc需要准备异步请求分析。
2 实现。Action名字——xxAsync,例如NewsAsyn。还有一个异步结束——NewsCompleted。是一对的,前者用来唤起一个线程响应请求。后者是将结果返回用户,是由另一个线程完成的。不能作为Action直接被调用,
3 不能直接调用函数名称为XXCompleted,但是可以给函数取一个别名叫——XXCompleted
4 函数参数传递方式不同。直接传递变量可以,返回结果的时候需要使用AsyncManager.Parameters字典类来做传递。
同步的时候一个线程,变量都在一起。异步的时候第一线程已经没了,必须使用中间变量在两个线程之间转发数据。这个中间变量——AsyncManager。
5 AsyncManager,它专门用来监视多变量的实现。
6 OutstandingOperations.Decrement(),它是用来管理mvc当中的请求。让mvc架构知道当前有多少操作处于挂起状态。一旦把工作交给Action的后台后呢,就不管了。什么时候知道它结束了。OutstandingOperations,每完成一个对应的Acion,它就会减一,当它等于0的时候,MVC架构知道行了,你的controller的事彻底完成了。你的Completed方法就该调用了。
并行操作的性能
异步可以并行访问,提供性能提升。
上图是同步访问,函数是顺序执行,所以时间是三个时间的总和。
Increment(3)——说明有三个操作要做
Decrement()——news完成后操作数减一。
全部完了之后,用一个compelete函数,把当前所有的信息拿到。拿到后,把它生成view并且返回。
上面,由于三个操作是并行的,所以执行时间是三个中最长的时间。
应用场景。当Action 有多个内容时,可以使用并行。
对异步请求使用标签
授权认证(匿名,user,admin…等等)
异步请求时,标签不能加在 Completed 上面,因为时机太晚。应该在开始操作之前就验证用户是否是合法用户。
超时
认证
异步操作很耗时,那么必然有一个超时的设定。否则的话无限的等,服务器就挂住了。
HandleError——当Action出现错误的时候,就自己写一个exception处理错误。
关于异步方法调用的附加说明
特别说明
1 异步调用中Action名字带有特别的记号——后缀Async或后缀Completed。不能拿url(route)直接调用的。可以给它重命名。
2 如果一个一般的Action方法调用时BeginMethod()/EndMethod(),回调函数不再MVC控制范围内。
使用BeginMethod()/EndMethod(),意味着会有另外一个请求,需要使用asyncManager请求操作。
上图,整个方法异步,但其中有的步骤是同步的。
asyncManager的Finish方法来验证completed,然后来决定这个东西是不是已经完成。
HTML的 Action和RenderAction可以指向异步方法的,但是这个方法可以同步去调用。
更新Model层UpdateModel
提交后,刷新就会提交。导致数据重复。
ModelState在刷新的时候会不可用。避免用户用鼠标刷新页面导致重复数据提交。
不是MVC,可以限制在多少秒提交,设置一个阀值,状态变量。然后检查是否可以用。
验证数据
使用标签去验证数据
它是写在Model层的。在Model 层 使用这样的方式,对Model层的数据添加、删除、修改进行验证。
安全性
永远不要不加处理的使用用户的输入
Html.encode
总结
- Action的调用与属性
附:
标题:粗体+斜体+黑色
ppt文字:宋体+黑色
作者语录:斜体+黑色/红色/蓝色
我的心得:@开头