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.异步控制器

在异步调用的过程中,服务器在等待第一个请求完成的过程中不会阻塞对其他请求的响应。 因此,当有许多请求调用长时间运行的操作时,异步请求可以防止出现请求排队的情况。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#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:方法返回结果之后触发

1
2
3
4
5
6
7
8
9
10
11
public class MyActionFilter : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            //执行Action之前
        }
        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            //执行Action之后
        }
    }

在需要的Action上面加上验证

1
2
3
4
5
6
7
8
public class HomeController : Controller
    {
        [Filters.MyActionFilter]
        public ActionResult Index()
        {
            return View();
        }
    }

从源码的角度理解各种Result

 

 

 

其他学习教程:http://www.cnblogs.com/soaeon/p/5635144.html

 

posted @   ~沐风  阅读(294)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

喜欢请打赏

扫描二维码打赏

了解更多

点击右上角即可分享
微信分享提示