精通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对象,它提供关于请求和匹配路由的信息,如下图所示:
名称 | 描述 |
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 |
精通ASP.NET MVC——控制器和动作相关推荐
- 精通ASP.NET MVC ——控制器可扩展性
MVC中引导动作方法执行过程的请求流程管道中,有两个重要的部件:控制器工厂(Controller Factory) 和 动作调用器(Action Invoker).控制器工厂负责创建对请求进行服务的控 ...
- Asp.Net MVC控制器、控制器动作和动作结果
原文链接:http://www.asp.net/learn/mvc/ 这篇教程探索了ASP.NET MVC控制器(controller).控制器动作(controller action)和动作结果(a ...
- 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(8) 权限管理,自定义权限,扩展权限...
索引 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目 目录索引 简述 今天我们来做权限的管理,这篇比较多 希望新手朋友慢慢消化 项目准备 我们用的工具是:VS 2013 ...
- 《精通 ASP.NET MVC 4》----1.3 ASP.NET MVC的关键优点
本节书摘来自异步社区<精通 ASP.NET MVC 4>一书中的第1章,第1.3节,作者: [美]Adam Freeman ,译者: 李萍 , 徐燕萍 , 林逸 , 更多章节内容可以访问云 ...
- 《精通 ASP.NET MVC 3 框架(第三版)》----第2章 准备工作 2.1 准备工作站
本节书摘来自异步社区<精通 ASP.NET MVC 3 框架(第三版)>一书中的第2章,第1节,作者: [美]Adam Freeman , Steven Standerson,译者: 林逸 ...
- ASP.NET MVC 控制器激活(一)
ASP.NET MVC 控制器激活(一) 前言 在路由的篇章中讲解了路由的作用,讲着讲着就到了控制器部分了,从本篇开始来讲解MVC中的控制器,控制器是怎么来的?MVC框架对它做了什么?以及前面有的篇幅 ...
- ASP.NET MVC 控制器激活(二)
ASP.NET MVC 控制器激活(二) 前言 在之前的篇幅中,用文字和图像来表示了控制器的激活过程,描述的角度都是从框架默认实现的角度去进行描述的,这样也使得大家都可以清楚的知道激活的过程以及其中涉 ...
- 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(7.2) 模块管理,模块的添加、修改、删除...
索引 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目 目录索引 简述 今天我们来做模块管理的 添加.修改.删除 项目准备 我们用的工具是:VS 2013 + SqlSer ...
- 使用jQuery.Ajax向ASP.NET MVC控制器Post数据
jQuery自带了Ajax的函数,你可以使用它从远程服务器下载网页,但问题是,大部分Ajax都是通过GET这种方式与远程服务器交互的. 但如果你想通过Ajax向远程服务器传递数据呢?当然jQuery. ...
最新文章
- 小米自动化运维平台演进设计思路
- redis 报 error NOTAUTH Authentication required
- php 播放多个音乐,meting 音乐播放插件多域名跨域解决方法
- 计算机应用基础案例教程总结,计算机应用基础案例教程
- 前端学习(1295):第三方模块npm
- wap打包 本地化 hbuilder_秋收接近尾声 冰城开启秸秆打包、秋整地
- 操作系统:读者-写者问题 (C语言 winapi)
- (2)从文件中解析JSON数据
- E-prime实验设计常用技术
- coreldraw x5 选择工具快捷键_coreldraw x5快捷键大全 coreldraw快捷键分享
- Android Studio基础-Activity生命周期与多个Activity跳转
- 多种方法在Markdown加入上划线、中划线、下划线
- Hardhat以太坊智能合约开发框架基础教程
- 广义瑞利商_LDA里的瑞利商和广义瑞利商
- 微信小程序 给数字或文字加横线,比如原价、已完成任务
- 计算机网络研学日志,研修日志信息技术
- 导入semantic-ui-css/semantic.min.css样式失败
- MySQL数据库的进销存
- cocos2dx的图片加载
- python 股票量化盘后分析系统V0.42
热门文章
- 2017 Google 开发者大会直播入口
- C++第15周(春)项目2 - 用文件保存的学生名单
- content属性的4种用途
- PHP中静态方法(static)与非静态方法的使用及区别
- 字中字效果-html5实例
- ASP技巧:在Access数据库中重命名表
- 中文导致Mybatis无效的列索引
- python编的游戏越玩越卡_用Python写游戏,不到十分钟就学会了
- python项目如何上线_django项目部署上线(示例代码)
- 国家开放大学本科计算机应用基础,【(精华版)最新国家开放大学电大本科《计算机应用基础》网络课网考形考作业一及三试题答案】.docx...