ASP.NET MVC学习(2)控制器Controller

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();
        }
ViewResult
public EmptyResult  Index()
{
   return null;
}
EmptyResult
//方法1:ContentResult作为返回类型
public ContentResult Index()
        {
             return Content("Hello World");
        }
//方法2:ActionResult作为返回类型
public ActionResult Index()
        {
            return Content("Hello World");
        }
ContentResult
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; }
     }
JsonResult
//方法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
        }
RedirectResult
public ActionResult redirectResult()
   {
            return Redirect("https://www.google.com.hk/");//具体的URL
    }
public RedirectToRouteResult redirectToRouteResult()
   {
         return RedirectToAction("Index");
    }
RedirectToRouteResult

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

 

posted @ 2016-11-28 09:53  ~沐风  阅读(283)  评论(0编辑  收藏  举报