0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

控制器Controller的使用方法

jf_78858299 来源:python技术探秘 作者:梦中的Aoede 2023-03-29 11:28 次阅读

Controller的运行过程

上文我们已经讲到,控制器负责响应浏览器传送过来的所有请求。在MVC中,每一个浏览器请求都映射到一个控制器(Controller)中,每个请求都会有个动作(Action),只要动作存在,就可以通过该动作方法接收客户端传来的请求与决定响应的视图(View)。

我们以之前创建的MVC项目为例,打开项目的Index.cshtml页面。

图片

显示的界面如下:

图片

可以看到,页面的地址栏URL为:http://localhost:61515/Home/Index

根据路由规则,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请求参数处理

试想一下,我们在浏览器地址栏经常能看到URL后面接很多个参数,比如百度搜索:https://www.baidu.com/s?ie=UTF-8&wd=梦中的Aoede URL后面有ie和wd两个参数,那么这种参数在MVC中是怎样获取的呢?

举个例子,我们给首页链接增加两个参数:http://localhost:61515/Home/Index?name=梦中的Aoede&age=18

那么在Index方法中,正常情况我们可以通过Request.QueryString获取到这两个参数。如下:

public ActionResult Index()
{
    var name = Request.QueryString["name"];
    var age = Request.QueryString["age"];
    return Content($"name:{name},age:{age}");
}

打开http://localhost:61515/Home/Index?name=梦中的Aoede&age=18,显示如下:

图片其实在MVC中,参数的传递是通过模型绑定(Model Binding)机制从RequestContext中获取到参数数据的。获取到数据之后再将数据传入到方法的参数中,所以我们只需要在方法中增加两个参数即可,如下:

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

需要注意的是,虽然控制器返回的是动作结果(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的返回值类型等内容。更多内容可关注我后续文章。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    15223

    浏览量

    171186
  • 浏览器
    +关注

    关注

    1

    文章

    974

    浏览量

    34417
  • MVC
    MVC
    +关注

    关注

    0

    文章

    73

    浏览量

    13783
收藏 人收藏

    评论

    相关推荐

    基型控制器使用方法

    目前,控制器(仪表)已经很多,产品已在工程实际中得到了广泛的应用,基型控制器使用方法如下:1.基型控制器主要性能指标基型控制器的主要技术指
    发表于 06-22 10:18

    求教UCGUI模拟使用方法

    刚刚在STM32上移植UCGUI,用的是固件3.5版本,ILI9341液晶控制器,现在急于验证一下,结果发现我的板子坏了。求教高手传我UCGUI模拟器使用方法,越详细越好。
    发表于 02-07 21:42

    DSPIC33 EV家庭控制器是浮点控制器还是定点控制器

    DSPIC33 EV家庭控制器是浮点控制器还是定点控制器?如何知道? 以上来自于百度翻译 以下为原文 Is dspic33ev family controller is floati
    发表于 10-08 15:57

    PWM控制器使用方法

    并且抑制系统输入电压的变化。该系统概念描述了开关电源。输入和输出可以是直流、正弦(交流)或甚至一些其他周期性波形。让我们看一下两个非常流行的PWM控制器系列,UC3842/UC3843/UC3844
    发表于 03-06 06:45

    PID Controller比例积分微分控制器

    Introduce引言Speend速度来源LPFilter低通滤波PID Controller比例积分微分控制器Summary总结
    发表于 09-03 06:45

    STM32外部中断事件控制器EXTI的相关资料推荐

    : External interrupt / event controller外部中断/事件控制器提示:以下是本篇文章正文内容一、EXTI功能框图二、使用方法1.EXTI_InitTypeDef 初始化结构体1-EXTI_Lin
    发表于 12-01 08:06

    Gowin® Flash Controller IP用户指南

    Gowin®Flash Controller IP 用户指南主要包括功能简介、信号定义、工作原理、GUI 调用等,旨在帮助用户快速了解 Gowin Flash Controller IP 的特性及使用方法
    发表于 10-09 06:14

    Gowin SDIO Slave Controller IP用户指南

    Gowin SDIO Slave Controller IP 用户指南旨在帮助用户快速掌握Gowin SDIO Slave Controller 的功能。它主要帮助用户快速了解 GowinSDIO Slave Controller
    发表于 10-10 06:18

    锦鑫推出LED全彩控制器MINI CONTROLLER搭配R

    锦鑫推出LED全彩控制器MINI CONTROLLER搭配RF无线遥控模块锦鑫光电(ARC SOLID-STATE LIGHTING)发表新款12通道LED全彩控制器MINI CONTROLL
    发表于 04-06 10:04 815次阅读

    控制器的GPRS无线上网方法

    介绍一种在微控制器上实现PPP协议,并使其控制GPRS模块通过GPRS连入Internet的方法;介绍GPRS技术和GPRS模块的使用方法;重点介绍微
    发表于 04-16 21:56 2574次阅读
    微<b class='flag-5'>控制器</b>的GPRS无线上网<b class='flag-5'>方法</b>

    示波器的使用方法(三):示波器的使用方法详解

    示波器的使用方法并非很难,重点在于正确使用示波器的使用方法。往期文章中,小编对模拟示波器的使用方法和数字示波器的使用方法均有所介绍。为增进大家对示波器的
    的头像 发表于 12-24 20:37 2477次阅读

    STM32外部中断事件控制器EXTI概念及使用方法

    : External interrupt / event controller外部中断/事件控制器提示:以下是本篇文章正文内容一、EXTI功能框图二、使用方法1.EXTI_InitTypeDef 初始化结构体1-EXTI_Lin
    发表于 11-22 16:21 7次下载
    STM32外部中断事件<b class='flag-5'>控制器</b>EXTI概念及<b class='flag-5'>使用方法</b>

    Gowin Flash Controller IP用户指南

    Gowin® Flash Controller IP 用户指南主要包括功能简介、信号定义、工 作原理、GUI 调用等,旨在帮助用户快速了解 Gowin Flash Controller IP 的 特性及使用方法
    发表于 09-15 09:32 2次下载
    Gowin Flash <b class='flag-5'>Controller</b> IP用户指南

    模糊控制器的原理及使用方法

    模糊控制器是一种基于模糊逻辑的控制器,通过将输入变量和输出变量都表示为模糊量,并运用模糊推理来实现针对复杂系统的控制。与传统的控制器相比,模糊控制器
    发表于 03-17 18:12 2757次阅读

    正运动技术CAD导图软件配合控制器使用方法

    正运动技术CAD导图软件配合控制器使用方法
    的头像 发表于 10-12 18:20 1367次阅读
    正运动技术CAD导图软件配合<b class='flag-5'>控制器</b>的<b class='flag-5'>使用方法</b>