• ASP.NET MVC学习(二)之控制器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

  • 相关阅读:
    window.loaction.href 不自动跳转的问题
    SQL语句
    C# 里面swith的或者
    跨域
    memcached总结
    应用 memcached 提升站点性能
    安装和使用 memcached
    Unity3D学习笔记(三十):Lua
    Unity3D学习笔记(二十九):AssetBundle
    Unity3D学习笔记(二十八):Editor
  • 原文地址:https://www.cnblogs.com/cnki/p/6108319.html
Copyright © 2020-2023  润新知