ASP.NETMVC5基础-控制器(Controller)详解
在上⽂中我们简单了解了下控制器Controller的作⽤,本⽂我将详细介绍控制器Controller的使⽤⽅法。
Controller的运⾏过程
上⽂我们已经讲到,控制器负责响应浏览器传送过来的所有请求。在MVC中,每⼀个浏览器请求都映射到⼀个控制器(Controller)中,每个请求都会有个动作(Action),只要动作存在,就可以通过该动作⽅法接收客户端传来的请求与决定响应的视图(View)。
我们以之前创建的MVC项⽬为例,打开项⽬的Index.cshtml页⾯。
显⽰的界⾯如下:
根据路由规则,Home是控制器(Controller)名,Index是动作(Action)名。所以这个URL调⽤的是HomeController控制器下的Index⽅法。
在Index⽅法中,只有这么⼀⾏代码:return View();,表⽰返回视图,然后返回给浏览器的是Views/Home⽂件夹下的Index.cshtml页⾯。
虽然我们在Index⽅法中没有指定返回哪个页⾯,但根据ASP.NET MVC的约定规则,控制器会到Views⽂件夹中,与Controller名称相同⽂件夹下的同⼀⽅法名的页⾯。所以返回的是Home下的Index.cshtml页⾯。具体的有关控制器返回View的内容下⽂会详细说明。
控制器的运⾏过程⼤体如上,从浏览器请求到控制器返回结果的整体流程为:
Controller请求参数处理
那么在Index⽅法中,正常情况我们可以通过Request.QueryString获取到这两个参数。如下:
public ActionResult Index()
{
var name = Request.QueryString["name"];
var age = Request.QueryString["age"];
return Content($"name:{name},age:{age}");
}
public ActionResult Index(string name,int age)
{
return Content($"name:{name},age:{age}");
}
打开页⾯输出结果还是⼀样的:
相同的,如果浏览器通过POST⽅式传过来⼀个表单,那么我们也可以在Index参数中使⽤表单对应的Model实体类来接收。在此我就不赘述了。
Controller返回值说明
Action处理完请求后,会将结果返回给客户端。Action返回的结果我们称为动作结果(Action Result)。
所有的动作结果都继承⾃ActionResult基类,以HomeController中的Index⽅法为例,它return的View()就是⼀个ViewResult类,ViewResult 类也是ActionResult的⼦类。
ASP.NET MVC框架⽀持六种标准类型的动作结果:
动作名称概述⽅法名
ViewResult视图内容,HTML或标记View
动作名称概述⽅法名
EmptyResult空内容
RedirectResult重定向到新的URL Redirect
RedirectToRouteResult重定向到新的控制器RedirectToAction/RedirectToRoute
JsonResult返回⼀个JSON(Javascript Object Notation)内容Json
ContentResult返回⽂本内容Content
mvc的controller需要注意的是,虽然控制器返回的是动作结果(Action Result),但在代码中,我们调⽤的是Controller基类中的⽅法。在上⽂的表中有对应的⽅法名。
除了以上六种动作结果以外,你还可以给Action⽅法返回其他类型的返回值,这个返回值会⾃动被包装在ContentResult中。⽐如这段代码:
public class HomeController : Controlle
{
public DateTime Index()
{
return DateTime.Now;
}
}
Index返回的是DateTime对象,⽽在浏览器中,显⽰的是⼀个⽇期字符串。
MVC过滤器
过滤器在MVC中也是个⾮常重要的概念,本⽂仅简单介绍下什么是过滤器,详细的内容我会在后续⽂章中深⼊说明。
过滤器(Filters)就是向请求处理管道中注⼊额外的逻辑。
过滤器有不同类型,MVC⽀持的过滤器有:授权(Authorization)、⾏为(Action)、结果(Result)和异常(四种),不同类型有不同的作⽤。
我们以授权(Authorization)为例简单说明下。⽐如我们有个⽅法,只有登录⽤户才可以调⽤,那么我们只需要添加⼀个验证⽤户是否登录的授权过滤器,在对应的⽅法上⽅添加此过滤器的标记即可。
总结
通过本⽂可以了解到,Controller的运⾏过程,Controller中Action如何获取参数、以及Action的返回值类型等内容。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。