天天看点

精通ASP.NET MVC——控制器和动作接受请求数据: 动作结果 

在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对象,它提供关于请求和匹配路由的信息,如下图所示: 

RequestContext类定义的属性

名称 描述
HttpContext 返回一个描述当前请求的 HttpContextBase 对象
RouteData 返回一个描述匹配请求的路由的RouteData对象

HttpContextBase对象对一组描述当前请求的对象提供访问。RouteData对象描述了路由,下图描述了RouteData属性:

RouteData类定义的属性

名称 描述
Route 返回匹配路由的RouteBase实现
RouteHandler 返回处理路由的IRouteHandler
Values 返回按名称索引的片段值的集合

运行效果如下图所示: 

精通ASP.NET MVC——控制器和动作接受请求数据: 动作结果 

接受请求数据: 

控制器经常需要访问来自于输入的请求的数据,如查询字符串值,表单值,以及由路由系统根据输入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框架有许多内建的动作结果类型,如下图所示:

内建的ActionResult

类型 描述 辅助器方法
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