• [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文字:宋体+黑色

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

    我的心得:@开头

  • 相关阅读:
    C/C++的区别
    stm32之UCOS-III
    PID控制及整定算法
    PCB设计基础及技巧
    电路的一些基本理论
    stm32与三菱PLC通信
    stm32之外设控制
    stm32之内部功能
    JavaScript数组方法详解
    git新建关联克隆仓库指令
  • 原文地址:https://www.cnblogs.com/htht66/p/2330824.html
Copyright © 2020-2023  润新知