游乐游手机版
首页/AI热点日报/热点详情

控制器Controller使用教程详解

类型:热点整理2026-07-11
ASP NETMVC控制器处理浏览器请求,通过路由映射到动作方法。利用模型绑定简化参数获取,支持GET POST。动作返回六种标准结果类型(视图、空内容、重定向、JSON、文本等)或任意类型。过滤器可在请求管道中插入授权、异常处理等逻辑。
# ASP.NET MVC 控制器(Controller)完全指南:从运行原理到返回值解析 在 ASP.NET MVC 框架中,**控制器(Controller)** 作为请求处理的核心枢纽,负责接收浏览器发起的每一次访问,并调度相应的操作方法(Action)。每个请求经路由映射后,都会到达特定控制器的某个动作,该动作解析客户端数据,并决定返回哪个视图(View)。本教程将全面解析控制器的运行机制、请求参数处理方式、返回值类型以及过滤器概念,帮你快速掌握控制器的实际应用。

一、Controller 的运行过程

当浏览器发送请求时,ASP.NET MVC 依据路由规则定位到对应的控制器与动作。下面以一个典型的 MVC 项目为例说明。

打开项目的 Index.cshtml 页面:

页面展示如下:

地址栏中显示的 URL 为:http://localhost:61515/Home/Index

根据默认路由规则:{controller}/{action}/{id}Home 为控制器名称,Index 为动作名称。因此该 URL 实际调用的是 HomeController 控制器下的 Index 方法。

Index 方法中,仅有一行代码:return View();,代表返回一个视图。此时 ASP.NET MVC 会按照约定路径查找视图:

  • Views 文件夹下定位与控制器同名的子目录(此处为 Home
  • 再找到与动作同名的视图文件(此处为 Index.cshtml

因此最终返回给浏览器的是 Views/Home/Index.cshtml 页面。关于控制器返回视图的更多细节,后续章节会详细说明。

小提示: 若动作方法中不指定视图名称,框架将默认按“控制器名/动作名”路径自动查找。你也可以通过 return View("其他视图名"); 返回指定的视图。

控制器的整体运行流程可通过下图概括:


二、Controller 请求参数处理

实际开发中,我们经常在浏览器地址栏看到带参数的 URL,例如百度搜索:https://www.baidu.com/s?ie=UTF-8&wd=梦中的Aoede。在 MVC 中,如何获取这类参数呢?

假设我们为首页链接添加两个参数:http://localhost:61515/Home/Index?name=梦中的Aoede&age=18

2.1 传统方式:Request.QueryString

在 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,显示结果如下:

2.2 更优方式:模型绑定(Model Binding)

实际上,MVC 内置的 模型绑定(Model Binding) 机制会自动从请求上下文(RequestContext)中提取参数,并自动映射到动作方法的参数上。因此只需在方法中直接声明参数即可:

public ActionResult Index(string name, int age)
{
    return Content($"name:{name},age:{age}");
}

访问相同的 URL,输出结果完全一致:

小提示: 模型绑定支持多种数据源(查询字符串、表单数据、路由信息等),并会自动完成类型转换。例如这里的 age 声明为 int 类型,框架会将字符串 "18" 自动转换为整数。

2.3 处理 POST 表单

如果浏览器通过 POST 方式提交表单,同样可以借助模型绑定。只需在动作方法的参数中使用与表单字段对应的模型实体类即可。例如:

public ActionResult Submit(UserModel user)
{
    // 直接使用 user 对象的属性
    return Content($"姓名:{user.Name},年龄:{user.Age}");
}

常见问题: 如果参数名称与模型属性名称不一致怎么办?
答: 可以使用 [Bind(Prefix = "前缀")] 特性指定前缀,或者使用 [FromQuery(Name = "别名")] 等特性进行自定义绑定。


三、Controller 返回值说明

动作(Action)处理完请求后,需将结果返回给客户端。返回的结果称为 动作结果(Action Result)

所有动作结果均继承自 ActionResult 基类。例如 View() 返回的是 ViewResult,而 ViewResult 正是 ActionResult 的子类。

3.1 六种标准动作结果

动作名称 概述 方法名
ViewResult 视图内容,HTML或标记 View
EmptyResult 空内容 (无)
RedirectResult 重定向到新的URL Redirect
RedirectToRouteResult 重定向到新的控制器 RedirectToAction / RedirectToRoute
JsonResult 返回JSON内容 Json
ContentResult 返回文本内容 Content

需要注意:虽然我们在代码中调用的是 Controller 基类中的方法(如 View()Json()),但实际返回的是对应的动作结果对象。

3.2 非标准返回值

除了上述六种标准动作结果外,你还可以让动作方法返回其他任意类型的对象。框架会自动将该对象包装在 ContentResult 中返回。例如:

public class HomeController : Controller
{
    public DateTime Index()
    {
        return DateTime.Now;
    }
}

浏览器中显示的是一个日期字符串:

小提示: 虽然可以返回任意类型,但为了代码清晰和可维护性,建议尽量使用标准的动作结果类型,尤其是 ViewResultJsonResultContentResult


四、MVC 过滤器(Filters)简介

过滤器(Filters)是 ASP.NET MVC 中间向请求处理管道注入额外逻辑的机制。本文仅做简要介绍,更深入的内容将在后续文章中详解。

MVC 支持以下四种过滤器:

  • 授权过滤器(Authorization):在动作执行前验证用户权限。
  • 行为过滤器(Action):在动作执行前后执行自定义逻辑。
  • 结果过滤器(Result):在结果返回前后执行自定义逻辑。
  • 异常过滤器(Exception):处理动作过程中抛出的异常。

例如,如果需要某个方法只允许登录用户访问,可以在方法上方添加授权过滤器标记:

[Authorize]
public ActionResult Secret()
{
    return View();
}

常见问题: 过滤器可以同时使用多个吗?执行顺序如何?
答: 可以。默认执行顺序为:授权过滤器 → 行为过滤器 → 动作方法 → 结果过滤器 → 异常过滤器(仅在发生异常时触发)。你可以通过 [FilterOrder] 特性改变顺序。


五、总结

通过本教程,你应该掌握了以下核心概念:

  • 控制器的运行过程:从浏览器请求到动作方法执行,再到视图返回。
  • 请求参数处理:利用模型绑定简化参数获取,支持 GET/POST 等多种方式。
  • 返回值类型:六种标准动作结果以及任意类型返回值的处理。
  • 过滤器:在请求管道中插入逻辑的机制,如授权、异常处理等。

这些知识是 ASP.NET MVC 开发的基础,掌握它们将帮助你更高效地构建 Web 应用。更多进阶内容(如路由定制、依赖注入、自定义过滤器等)敬请关注后续文章。

来源:https://m.elecfans.com/article/2045546.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。