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

  • FilecontentResult
  • FilePathResult
  • FileStreamResult
File

以二进制串流方式回传一个文档信息:

  • 直接输出byte[]属性
  • 指定文档路径输出文档属性
  • 指定Stream对象回传其属性

HttpStatusCodeResult

  • HttpNotFoundResult
  • HttpUnauthorizeResult
HttpNotFound

回传自定义的HTTP状态代码与消息:

  • 回传HTTP 404状态代码
  • 回传HTTP 401状态代码
JavaScriptResult JavaScript

回传的是JavaScript脚本

JsonResult Json 将数据串行化成JSON格式回传
RedirectResult

Redirect

RedirectPermanent

重新导向到指定的URL
RedirectToRouteResult

RedirectToAction

RedirectToActionPermanent

RedirectToRoute

RedirectToRoutePermanent

与RedirectResult类似,但是它是重导向到一个Action或Route

ViewResultBase

  • ViewResult
  • PartialViewResult

View

PartialView

回传一个View页面

  • 回传检视页面(View Page)
  • 回传部分检视页面(Partial 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运行完后的这段过程中,如果有任何异常发生,都可以在例外过滤器属性中做进一步处理。

posted on 2015-06-13 15:17  JessicaYe  阅读(527)  评论(0编辑  收藏  举报