精通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返回按名称索引的片段值的集合

运行效果如下图所示: 

           


接受请求数据: 

控制器经常需要访问来自于输入的请求的数据,如查询字符串值,表单值,以及由路由系统根据输入URL解析所得到得到参数。访问这些数据有三个主要途径:

1、通过一组上下文对象进行提取。

2、作为参数被传递给动作方法而形成的的数据。

3、明确地调用框架的模型绑定特性

 

当控制器通过Controller基类派生而来的时候,使得到了一组便利属性,可以用来访问与请求相关的信息。这些便利属性包括Request,Reponse,RouteData、HttpContext,以及Server。每一个属性都包括了请求不同方面的信息,是因为每一个都是从请求的ControllerContext实例接受了不同类型的数据。这些属性统称为“便利属性”如下图所示:

 

常用的上下文对象
属性类型描述
Request.QueryStringNameValueCollection随该请求发送的GET变量
Request.FormNameValueCollention随该请求发送的POST变量
Request.CookiesHttpCookieCollection由浏览器随该请求发送的Cookies
Request.HttpMethodsting用于该请求的HTTP方法(动词,如GET或者POST)
Request.HeadersNameValueCollection随该请求发送的整个HTTP报头
Request.UrlUrl所请求的URL
Request.UserHostAddressstring形成该请求的用户IP地址
Request.RouteRouteBase为该请求所选择的RouteTable.Routes条目
RouteData.ValuesRouteValueDictionary当前路由的参数(从URL或默认值提取)
HttpContext.ApplicationHttpApplicationStateBase应用程序状态库
HttpContext.CacheCache应用程序缓存库
HttpContext.ItemsIDictionary当前请求的状态库
HttpContext.SessionHttpSessionStateBase访问者会话状态库
UserIPrincipal已登录用户的认证信息
TempDataTempDataDictionary为当前用户存储的临时数据项

 


动作结果 

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重定向发送给一个特定的URLRedirect 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

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值