[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

给函数取个别名

clip_image002

ActionSelectorAttribute

把匹配的函数名字一一验证

clip_image004

AcceptVerbsAttribute

http请求方式get or post

clip_image006

模拟Rest请求

HttpPostArribute create

HttpPutAttribute update

HttpGetAttribute read

HttpDeleteAttribute delete

通过CRUD可以通过URL完成了。

Rest架构,可以方便进行CRUD操作。

映射参数

clip_image008

从页面提交的内容,post方式

Routeurl方式

调用Action

-          使用异步调用Action

可以使用异步的controller

响应请求的线程处理工作的线程

同步与异步的比较

clip_image010

Filter可以工作在Action之前。

编写异步Action

clip_image012

注意:

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方法就该调用了。

并行操作的性能

异步可以并行访问,提供性能提升。

clip_image014

上图是同步访问,函数是顺序执行,所以时间是三个时间的总和。

clip_image016

Increment3)——说明有三个操作要做

Decrement()——news完成后操作数减一。

全部完了之后,用一个compelete函数,把当前所有的信息拿到。拿到后,把它生成view并且返回。

上面,由于三个操作是并行的,所以执行时间是三个中最长的时间。

应用场景。当Action 有多个内容时,可以使用并行。

对异步请求使用标签

授权认证(匿名,useradmin…等等)

异步请求时,标签不能加在 Completed 上面,因为时机太晚。应该在开始操作之前就验证用户是否是合法用户。

clip_image018

超时

认证

异步操作很耗时,那么必然有一个超时的设定。否则的话无限的等,服务器就挂住了。

clip_image020

HandleError——当Action出现错误的时候,就自己写一个exception处理错误。

关于异步方法调用的附加说明

特别说明

1 异步调用中Action名字带有特别的记号——后缀Async或后缀Completed。不能拿urlroute)直接调用的。可以给它重命名。

2 如果一个一般的Action方法调用时BeginMethod()/EndMethod(),回调函数不再MVC控制范围内。

使用BeginMethod()/EndMethod(),意味着会有另外一个请求,需要使用asyncManager请求操作。

clip_image022

上图,整个方法异步,但其中有的步骤是同步的。

asyncManagerFinish方法来验证completed,然后来决定这个东西是不是已经完成。

HTML ActionRenderAction可以指向异步方法的,但是这个方法可以同步去调用。

更新ModelUpdateModel

clip_image024

提交后,刷新就会提交。导致数据重复。

ModelState在刷新的时候会不可用。避免用户用鼠标刷新页面导致重复数据提交。

不是MVC,可以限制在多少秒提交,设置一个阀值,状态变量。然后检查是否可以用。

验证数据

clip_image026

使用标签去验证数据

它是写在Model层的。在Model 使用这样的方式,对Model层的数据添加、删除、修改进行验证。

安全性

永远不要不加处理的使用用户的输入

Html.encode

总结

-          Action的调用与属性

附:

标题:粗体+斜体+黑色

ppt文字:宋体+黑色

作者语录:斜体+黑色/红色/蓝色

我的心得:@开头

原文地址:https://www.cnblogs.com/htht66/p/2330824.html