ASP.NET MVC 4框架揭秘:Controller(2)[1]

 我来答
大沈他次苹0B
2022-11-13 · TA获得超过7330个赞
知道大有可为答主
回答量:3059
采纳率:100%
帮助的人:178万
展开全部

     Controller( )

  通过Visual Studio的Controller创建向导创建的Controller类型实际上继承自抽象类System Web Mvc Controller 它是ControllerBase的子类 如下面的代码片段所示 除了直接继承ControllerBase之外 Controller类型还显式地实现了IController和IAsyncController接口 以及代表ASP NET MVC 四大筛选器(AuthorizationFilter ActionFilter ResultFilter和ExceptionFilter)的 个接口(我们会在第 章 Action的执行 中对筛选器进行详细介绍)

  public abstract class Controller :

  ControllerBase

  IController

  IAsyncController

  IActionFilter

  IAuthorizationFilter

  IExceptionFilter

  IResultFilter

  IDisposable

  …

  {

  //省略成员

  }

   同步还是异步

  从抽象类Controller的定义可以看出它同时实现了IController和IasyncController这两个接口 意味着它既可以采用同步的方式(调用Execute方法)执行 也可以采用异步的方式(调用BeginExecute/EndExecute方法)执行 但是即使执行BeginExecute/EndExecute方法 Controller也不一定是以异步方式执行的

  如下面的代码片段所示 Controller具有一个布尔类型的属性DisableAsyncSupport 表示是否关闭对异步执行的支持 在默认的情况下该属性总是返回False 即支持以异步方式执行Controller BeginExecute方法会根据DisableAsyncSupport属性决定究竟是调用Execute方法以同步的方式执行 还是调用BeginExecuteCore/EndExecuteCore方法以异步的方式执行 换句话说 如果我们希望Controller总是以同步的方式来执行 可以将DisableAsyncSupport属性设置为True

  public abstract class Controller: …

  {

  //其他成员

  protected virtual bool DisableAsyncSupport

  {

  get{return false;}

  }

  protected virtual IAsyncResult BeginExecute(RequestContext requestContext

  AsyncCallback callback object state)

  {

  if (this DisableAsyncSupport)

  {

  //通过调用Execute方法同步执行Controller

  }

  else

  {

  //通过调用BeginExecuteCore/EndExecuteCore方法异步执行Controller

  }

  }

  protected virtual IAsyncResult BeginExecuteCore(AsyncCallback callback

  object state)

  protected virtual void EndExecuteCore(IAsyncResult asyncResult)

  }

  现在我们通过一个简单的实例来演示属性DisableAsyncSupport对默认创建的Controller执行的影响 我们在一个ASP NET MVC应用中定义了一个具有如下定义的默认Home Controller 它重写了Execute ExecuteCore BeginExecute/EndExecute和BeginExecuteCore/ EndExecuteCore六个方法 同时将相应的方法名写入响应并最终呈现在浏览器上

lishixinzhi/Article/program/net/201311/16097

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式