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(); }

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.异步控制器
在异步调用的过程中,服务器在等待第一个请求完成的过程中不会阻塞对其他请求的响应。 因此,当有许多请求调用长时间运行的操作时,异步请求可以防止出现请求排队的情况。
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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框架的用法!