asp.net

位置:IT落伍者 >> asp.net >> 浏览文章

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


发布日期:2023年09月21日
 
ASP.NET MVC 4框架揭秘:Controller(2)[1]

Controller(

通过Visual Studio的Controller创建向导创建的Controller类型实际上继承自抽象类SystemWebMvcController它是ControllerBase的子类如下面的代码片段所示除了直接继承ControllerBase之外Controller类型还显式地实现了IController和IAsyncController接口以及代表ASPNET MVC 四大筛选器(AuthorizationFilterActionFilterResultFilter和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即支持以异步方式执行ControllerBeginExecute方法会根据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 (thisDisableAsyncSupport)

{

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

}

else

{

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

}

}

protected virtual IAsyncResult BeginExecuteCore(AsyncCallback callback

object state)

protected virtual void EndExecuteCore(IAsyncResult asyncResult)

}

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

[] []

               

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

下一篇:ASP.NET MVC 4框架揭秘:ControllerFactory[2]