控制器Controller使用教程详解
ASP NETMVC控制器处理浏览器请求,通过路由映射到动作方法。利用模型绑定简化参数获取,支持GET POST。动作返回六种标准结果类型(视图、空内容、重定向、JSON、文本等)或任意类型。过滤器可在请求管道中插入授权、异常处理等逻辑。
一、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;
}
}
浏览器中显示的是一个日期字符串:

小提示: 虽然可以返回任意类型,但为了代码清晰和可维护性,建议尽量使用标准的动作结果类型,尤其是 ViewResult、JsonResult 和 ContentResult。
四、MVC 过滤器(Filters)简介
过滤器(Filters)是 ASP.NET MVC 中间向请求处理管道注入额外逻辑的机制。本文仅做简要介绍,更深入的内容将在后续文章中详解。
MVC 支持以下四种过滤器:
- 授权过滤器(Authorization):在动作执行前验证用户权限。
- 行为过滤器(Action):在动作执行前后执行自定义逻辑。
- 结果过滤器(Result):在结果返回前后执行自定义逻辑。
- 异常过滤器(Exception):处理动作过程中抛出的异常。
例如,如果需要某个方法只允许登录用户访问,可以在方法上方添加授权过滤器标记:
[Authorize]
public ActionResult Secret()
{
return View();
}
常见问题: 过滤器可以同时使用多个吗?执行顺序如何?
答: 可以。默认执行顺序为:授权过滤器 → 行为过滤器 → 动作方法 → 结果过滤器 → 异常过滤器(仅在发生异常时触发)。你可以通过 [FilterOrder] 特性改变顺序。
五、总结
通过本教程,你应该掌握了以下核心概念:
- 控制器的运行过程:从浏览器请求到动作方法执行,再到视图返回。
- 请求参数处理:利用模型绑定简化参数获取,支持 GET/POST 等多种方式。
- 返回值类型:六种标准动作结果以及任意类型返回值的处理。
- 过滤器:在请求管道中插入逻辑的机制,如授权、异常处理等。
这些知识是 ASP.NET MVC 开发的基础,掌握它们将帮助你更高效地构建 Web 应用。更多进阶内容(如路由定制、依赖注入、自定义过滤器等)敬请关注后续文章。
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:控制器Controller使用教程详解要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
相关热点微软研究院与Salesforce Research联合发布了一项重要研究《Lost in Conversation》,该研究揭示了一个被广泛忽视但至关重要的问题——多轮对话中的“迷失”现象。这对于正在开发AI Agent系统的工程师而言,是必须正视的警示。 研究发现,当前最先进的大语言模型在面对多轮
人类进入智能手机时代后,摄影方式发生了翻天覆地的变化:拍照不仅依赖镜头与传感器,更依靠一系列图像算法,以更快的速度处理图像,显著提升拍摄效果。好作品不再只属于专业摄影师——当手机拍照引入图像算法,人人都能轻松拍出精彩照片。这一切要从人类对色彩的感知能力说起……色彩感知是人类在漫长进化中形成的一项核心
在上一篇文章中,我们介绍了以Google GPipe为代表的流水线并行范式。当模型规模过大,单块GPU无法容纳时,流水线并行会将模型的不同层分配到不同GPU,通过切割mini-batch实现流水线处理,提升计算与通信的比率,同时借助re-materialization机制有效降低显存占用。 不过在实
先说个核心思路:其实搭建一个微信公众号的智能问答系统,并没有想象中那么复杂。尤其是阿里云百炼平台的出现,让这件事的门槛降低了不少。这里我们以微信服务号为例,讲讲如何把大模型和公众号对接起来,再通过RAG技术把业务数据喂给机器,让它真正能“懂业务”。 整个流程可以拆成三步:第一步,建立连接;第二步,创
- 日榜
- 周榜
- 月榜
热点快看
