1.控制器
Controller接收用户请求,将Model和View匹配在一起,共同完成用户请求。它是一个分发器,通过选择不同的Model、View,可以决定完成不同的用户请求。
但Controller并不做任何的数据处理,只把用户的信息传递给模型,告诉Model做什么,选择符合要求的View返回给用户。
2.Controller处理请求的流程
3.ControllerBase类
4.Controller类
除了从ControllerBase类继承的方法,Controller类还有以下几个主要的方法:
1)Content
2).File方法
3).Json方法
4).PartialView方法
5).Redirect方法
6).View方法
7).JavaScript方法
用来返回可在客户端执行的脚本
5.ViewData与ViewBag的区别
6.TempData(可以跨Action传递,且只传递一次)
7.返回类型
返回类型都继承自抽象类ActionResult
//方法1: ViewResult作为返回类型 public ViewResult Index() { return View(); } //方法二: ViewResultBase作为返回类型 public ViewResultBase Index() { return View(); } //方法三: ActionResult作为返回类型 public ActionResult Index() { return View(); }
public EmptyResult Index() { return null; }
//方法1:ContentResult作为返回类型 public ContentResult Index() { return Content("Hello World"); } //方法2:ActionResult作为返回类型 public ActionResult Index() { return Content("Hello World"); }
public JsonResult jsonResult() { TechInfoCompanay jsonCompany=new TechInfoCompanay(){id="S001",CompanyName="信息科技有限公司"}; return Json(jsonCompany,JsonRequestBehavior.AllowGet); } //定义一个公司类 public class TechInfoCompanay { public string id { set; get; } public string CompanyName { set; get; } }
//方法1:RedirectResult作返回类型 public RedirectResult redirectResult() { return Redirect("https://www.google.com.hk/");//具体的URL } //方法1: ActionResult作返回类型 public ActionResult redirectResult() { return Redirect("https://www.google.com.hk/");//具体的URL }
public ActionResult redirectResult() { return Redirect("https://www.google.com.hk/");//具体的URL } public RedirectToRouteResult redirectToRouteResult() { return RedirectToAction("Index"); }
8.异步控制器
在异步调用的过程中,服务器在等待第一个请求完成的过程中不会阻塞对其他请求的响应。 因此,当有许多请求调用长时间运行的操作时,异步请求可以防止出现请求排队的情况。
#region 1、异步请求 [AsyncTimeout(1000)] public async Task<ActionResult> Index() { var data = await GetPageTaskAsync("http://163.com"); return data; } public async Task<ActionResult> GetPageTaskAsync(string url) { try { using (var client = new HttpClient()) { await Task.Delay(3000); var fetchTextTask = client.GetStringAsync(url); return Json(new { fetchText = await fetchTextTask,error="NO" },JsonRequestBehavior.AllowGet); } } catch (WebException ex) { throw ex; } } #endregion
9.行为过滤器
10.自定义行为过滤器
OnActionExecuting: 在方法执行之前执行
OnActionExecuted: 方法的逻辑代码执行完成之后触发
OnResultExecuting: 方法在准备放回结果的时候触发
OnResultExecuted:方法返回结果之后触发
public class MyActionFilter : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { //执行Action之前 } public override void OnResultExecuted(ResultExecutedContext filterContext) { //执行Action之后 } }
在需要的Action上面加上验证
public class HomeController : Controller { [Filters.MyActionFilter] public ActionResult Index() { return View(); } }
从源码的角度理解各种Result
其他学习教程:http://www.cnblogs.com/soaeon/p/5635144.html