ASP.NET MVC——Controller
Controller在ASP.NET MVC中负责控制所有客户端与服务器端的交互,并且负责协调Model与View之间的数据传递,是ASP.NET MVC的核心。
撰写Controller的基本要求:
1、Controller必须为公开类别;
2、Controller名称必须以Controller结尾;
3、必须继承ASP.NET MVC内建的Controller类别,或继承有实作IController界面的自定义类别,或自行实作IController;
4、所有动作方法必须为公开方法,任何非公开方法如声明为private或protected的方法都不会被视为一个动作方法。
Controller中的每一个Action可以定义0~多个参数,当Controller中的某个Action方法被调用运行完之后,其回传值通常是ActionResult或者衍生类。当然,也可以直接使用.NET内建的基本数据型别当作回传型别,如果Action声明成void,则代表Action不会回传任何数据到客户端。
一、Controller动作方法选定
NonAction主要用途是用来保护Controller中的特定公开方法不要发布到Web上,或尚未完成开发,暂不想公开的程序。
动作方法选定器——Http动词限定属性:HttpGet、HttpPost、HttpDelete、HttpPut、HttpHead、HttpOptions,这些都是动作方法选定器的一份子。
HttpGet:向特定的资源发出请求;
HttpPost:向指定资源提交数据进行处理请求;
HttpDelete:请求服务器删除Request-URI所标识的资源;
HttpPut:向指定资源位置上传其最新内容;
HttpHead:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回;
HttpOptions:返回服务器针对特定资源所支持的HTTP请求方法;
HttpPatch:向指定资源提交数据进行更新处理请求。
ActionResult的衍生型别:
型别 | Controller辅助方法 | 用途 |
ContentResult | Content | 回传一个用户自定义的用户属性 |
EmptyResult | 不响应任何信息到客户端 | |
FileResult
|
File |
以二进制串流方式回传一个文档信息:
|
HttpStatusCodeResult
|
HttpNotFound |
回传自定义的HTTP状态代码与消息:
|
JavaScriptResult | JavaScript |
回传的是JavaScript脚本 |
JsonResult | Json | 将数据串行化成JSON格式回传 |
RedirectResult |
Redirect RedirectPermanent |
重新导向到指定的URL |
RedirectToRouteResult |
RedirectToAction RedirectToActionPermanent RedirectToRoute RedirectToRoutePermanent |
与RedirectResult类似,但是它是重导向到一个Action或Route |
ViewResultBase
|
View PartialView |
回传一个View页面
|
二、Controller协调数据传递
Controller负责处理浏览器来的所有要求,并决定响应什么属性给浏览器,除了这件事以外,Controller还负责协调Model与View之间的数据传递。在ASP.NET MVC中的几种把数据传递给View的方式:ViewData、ViewBag与TempData。
ViewData是一个字典集合,通过key值读取对应的value使用方法:ViewData["name"]="Jessica",传入的key必须为字符串型别;
ViewBag是一种dynamic动态类型,作用和ViewData一样,都是用来存储信息,有一些不同的是ViewData是object类型,ViewBag是动态类型,从运行效率上来讲,ViewBag高于ViewData,即可以少输入几个字。使用方法:ViewBag.data="Jessica";
TempData与ViewData一样也是字典型别,其型别是TempDataDictionary,要注意的是TempData中的信息暂存时间为一次网页请求当页面再次刷新,数据消失。使用方法:TempData["name"]="Jessica"。
三、动作过滤器
在Controller运行时,还有一层动作过滤器机制:授权过滤器、动作过滤器、结果过滤器和例外过滤器。
授权过滤器属性:授权过滤器是在ASP.NET MVC运行Controller与Action之前最早运行的过滤器,可用来对Action在正式运行前做一些额外的判断。ASP.NET中内建了几个授权过滤器:Authorize、AllowAnonymous、ChildActionOnly、RequireHttps、ValidateInput和ValidataAntiForgeryToken。
Authorize:设置某些符合要求的角色才能运行此Action。
AllowAnonymous:通常与Authorize搭配使用,用于在程序中设置在不登录的情况下也可以运行Action。
ChildActionOnly:设置通过RenderAction运行的Action只允许通过Html.RenderAction辅助方法运行。
RequireHttps:让Action仅能显示在HTTPS安全联机的状态下。
ValidateInput:关闭网页输入验证。
ValidataAntiForgeryToken:为预防跨网站造假点击的攻击。
动作过滤器属性:提供两个事件在Action运行前后,分别是OnActionExecuting和OnActionExecuted。ASP.NET MVC中内建了几个动作过滤器:ActionFilter、AsyncTimeout和NoAsyncTimeout。
ActionFilter:是一个抽象类,没有任何程序代码,只是一个基本ActionFilter程序代码框架,可以在自定义动作过滤器时直接继承ActionFilterAttribute。
AsyncTimeout:设置在运行异步控制器时的逾时毫秒数。
NoAsyncTimeout:设置在运行异步控制器时不要有逾期时间(逾期时间无限大)。
结果过滤器属性:提供了两个事件在运行View的前后运行,分别是OnResultExecuting和OnResultExecuted。
例外过滤器属性:从第一个授权过滤器运行开始,到ActionResult运行完后的这段过程中,如果有任何异常发生,都可以在例外过滤器属性中做进一步处理。