在MVC框架中,控制器必须实现System.Web.Mvc命名空间的IController接口,如下图所示:
    //// 摘要://     定义控制器所需的方法。public interface IController{//// 摘要://     执行指定的请求上下文。//// 参数://   requestContext://     请求上下文。void Execute(RequestContext requestContext);}这是一个很简单的接口。唯一的方法Excute,在请求以控制器为目标时被调用。但是发挥着重要的作用。 在Controller文件夹中创建一个新的名为“BasicController”的类文件,如下图所示:
    public class BasicController : IController{public void Execute(RequestContext requestContext){string controller = requestContext.RouteData.Values["controller"].ToString();string action = requestContext.RouteData.Values["action"].ToString();requestContext.HttpContext.Response.Write(string.Format("Controller:{0},Action:{1}", controller, action));}}IController接口的Execute方法被传递给System.Web.Routing.RequestContext对象,它提供关于请求和匹配路由的信息,如下图所示:
| 名称 | 描述 | 
| HttpContext | 返回一个描述当前请求的 HttpContextBase 对象 | 
| RouteData | 返回一个描述匹配请求的路由的RouteData对象 | 
HttpContextBase对象对一组描述当前请求的对象提供访问。RouteData对象描述了路由,下图描述了RouteData属性:
| 名称 | 描述 | 
| Route | 返回匹配路由的RouteBase实现 | 
| RouteHandler | 返回处理路由的IRouteHandler | 
| Values | 返回按名称索引的片段值的集合 | 
运行效果如下图所示:
           
接受请求数据:
控制器经常需要访问来自于输入的请求的数据,如查询字符串值,表单值,以及由路由系统根据输入URL解析所得到得到参数。访问这些数据有三个主要途径:
1、通过一组上下文对象进行提取。
2、作为参数被传递给动作方法而形成的的数据。
3、明确地调用框架的模型绑定特性。
当控制器通过Controller基类派生而来的时候,使得到了一组便利属性,可以用来访问与请求相关的信息。这些便利属性包括Request,Reponse,RouteData、HttpContext,以及Server。每一个属性都包括了请求不同方面的信息,是因为每一个都是从请求的ControllerContext实例接受了不同类型的数据。这些属性统称为“便利属性”如下图所示:
| 属性 | 类型 | 描述 | 
| Request.QueryString | NameValueCollection | 随该请求发送的GET变量 | 
| Request.Form | NameValueCollention | 随该请求发送的POST变量 | 
| Request.Cookies | HttpCookieCollection | 由浏览器随该请求发送的Cookies | 
| Request.HttpMethod | sting | 用于该请求的HTTP方法(动词,如GET或者POST) | 
| Request.Headers | NameValueCollection | 随该请求发送的整个HTTP报头 | 
| Request.Url | Url | 所请求的URL | 
| Request.UserHostAddress | string | 形成该请求的用户IP地址 | 
| Request.Route | RouteBase | 为该请求所选择的RouteTable.Routes条目 | 
| RouteData.Values | RouteValueDictionary | 当前路由的参数(从URL或默认值提取) | 
| HttpContext.Application | HttpApplicationStateBase | 应用程序状态库 | 
| HttpContext.Cache | Cache | 应用程序缓存库 | 
| HttpContext.Items | IDictionary | 当前请求的状态库 | 
| HttpContext.Session | HttpSessionStateBase | 访问者会话状态库 | 
| User | IPrincipal | 已登录用户的认证信息 | 
| TempData | TempDataDictionary | 为当前用户存储的临时数据项 | 
动作结果
MVC框架通过使用动作结果(Action Result)把指明意图 和 执行意图分离开来。一般都是返回一个派生与ActionResult类的对象,它描述控制器相应应该要完成的功能。例如,渲染一个视图,重定向到另一个URL或 动作方法等,在动作方法被执行后,创建MVC框架处理的ActionResult对象以产生结果。MVC框架有许多内建的动作结果类型,如下图所示:
| 类型 | 描述 | 辅助器方法 | 
| ViewResult | 返回指定的或默认的视图模板 | View | 
| PartialViewResult | 返回指定的或默认的分部视图模板 | PartialView | 
| RedireToRouteResult | 将HTTP 301或者302重定向发给一个动作方法或特定的路由条目,根据路由配置生成一个URL | RedirectToAction RedirectToActionPermanent RedirectToRoute RedirectToRoutePermanent | 
| RedirectResult | 将HTTP301或302重定向发送给一个特定的URL | Redirect RedirectPermanent | 
| ContentResult | 返回原始的文本数据给浏览器,随意设置文本类型头部 | Content | 
| FileResult | 将二进制(例如,磁盘文件或内存字节数组)直接传送给浏览器 | File | 
| JsonResult | 将一个.NET对象序列化成JSON格式,发送给响应 | Json | 
| JavaScriptResult | 发送一个由浏览器执行的JavaScript源代码偏度 | JavaScript | 
| HttpUnauthorizedResult | 将响应的HTTP状态码设置为401(意味“未授权”),这会引发当前的认证机制(表单认证或Windows认证)要求访问者进行登录 | None | 
| HttpNotFoundResult | 返回一个HTTP的“404——未找到”错误 | HttpNotFount | 
| HttpStatusCodeResult | 返回一个指定的HTTP码 | None | 
| EmptyResult | 什么也不做 | None |