在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.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

精通ASP.NET MVC——控制器和动作相关推荐

  1. 精通ASP.NET MVC ——控制器可扩展性

    MVC中引导动作方法执行过程的请求流程管道中,有两个重要的部件:控制器工厂(Controller Factory) 和 动作调用器(Action Invoker).控制器工厂负责创建对请求进行服务的控 ...

  2. Asp.Net MVC控制器、控制器动作和动作结果

    原文链接:http://www.asp.net/learn/mvc/ 这篇教程探索了ASP.NET MVC控制器(controller).控制器动作(controller action)和动作结果(a ...

  3. 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(8) 权限管理,自定义权限,扩展权限...

    索引 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目 目录索引 简述 今天我们来做权限的管理,这篇比较多 希望新手朋友慢慢消化 项目准备 我们用的工具是:VS 2013 ...

  4. 《精通 ASP.NET MVC 4》----1.3 ASP.NET MVC的关键优点

    本节书摘来自异步社区<精通 ASP.NET MVC 4>一书中的第1章,第1.3节,作者: [美]Adam Freeman ,译者: 李萍 , 徐燕萍 , 林逸 , 更多章节内容可以访问云 ...

  5. 《精通 ASP.NET MVC 3 框架(第三版)》----第2章 准备工作 2.1 准备工作站

    本节书摘来自异步社区<精通 ASP.NET MVC 3 框架(第三版)>一书中的第2章,第1节,作者: [美]Adam Freeman , Steven Standerson,译者: 林逸 ...

  6. ASP.NET MVC 控制器激活(一)

    ASP.NET MVC 控制器激活(一) 前言 在路由的篇章中讲解了路由的作用,讲着讲着就到了控制器部分了,从本篇开始来讲解MVC中的控制器,控制器是怎么来的?MVC框架对它做了什么?以及前面有的篇幅 ...

  7. ASP.NET MVC 控制器激活(二)

    ASP.NET MVC 控制器激活(二) 前言 在之前的篇幅中,用文字和图像来表示了控制器的激活过程,描述的角度都是从框架默认实现的角度去进行描述的,这样也使得大家都可以清楚的知道激活的过程以及其中涉 ...

  8. 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(7.2) 模块管理,模块的添加、修改、删除...

    索引 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目 目录索引 简述 今天我们来做模块管理的 添加.修改.删除 项目准备 我们用的工具是:VS 2013 + SqlSer ...

  9. 使用jQuery.Ajax向ASP.NET MVC控制器Post数据

    jQuery自带了Ajax的函数,你可以使用它从远程服务器下载网页,但问题是,大部分Ajax都是通过GET这种方式与远程服务器交互的. 但如果你想通过Ajax向远程服务器传递数据呢?当然jQuery. ...

最新文章

  1. 小米自动化运维平台演进设计思路
  2. redis 报 error NOTAUTH Authentication required
  3. php 播放多个音乐,meting 音乐播放插件多域名跨域解决方法
  4. 计算机应用基础案例教程总结,计算机应用基础案例教程
  5. 前端学习(1295):第三方模块npm
  6. wap打包 本地化 hbuilder_秋收接近尾声 冰城开启秸秆打包、秋整地
  7. 操作系统:读者-写者问题 (C语言 winapi)
  8. (2)从文件中解析JSON数据
  9. E-prime实验设计常用技术
  10. coreldraw x5 选择工具快捷键_coreldraw x5快捷键大全 coreldraw快捷键分享
  11. Android Studio基础-Activity生命周期与多个Activity跳转
  12. 多种方法在Markdown加入上划线、中划线、下划线
  13. Hardhat以太坊智能合约开发框架基础教程
  14. 广义瑞利商_LDA里的瑞利商和广义瑞利商
  15. 微信小程序 给数字或文字加横线,比如原价、已完成任务
  16. 计算机网络研学日志,研修日志信息技术
  17. 导入semantic-ui-css/semantic.min.css样式失败
  18. MySQL数据库的进销存
  19. cocos2dx的图片加载
  20. python 股票量化盘后分析系统V0.42

热门文章

  1. 2017 Google 开发者大会直播入口
  2. C++第15周(春)项目2 - 用文件保存的学生名单
  3. content属性的4种用途
  4. PHP中静态方法(static)与非静态方法的使用及区别
  5. 字中字效果-html5实例
  6. ASP技巧:在Access数据库中重命名表
  7. 中文导致Mybatis无效的列索引
  8. python编的游戏越玩越卡_用Python写游戏,不到十分钟就学会了
  9. python项目如何上线_django项目部署上线(示例代码)
  10. 国家开放大学本科计算机应用基础,【(精华版)最新国家开放大学电大本科《计算机应用基础》网络课网考形考作业一及三试题答案】.docx...