ASP.NET MVC 和 Web API 的执行流程和生命周期,需要结合请求处理管道、核心组件以及生命周期方法进行阐述。
ASP.NET MVC 执行流程
当一个请求进入 ASP.NET MVC 应用时,会经过以下几个核心阶段:
1. 请求进入 IIS
- IIS 处理请求:IIS 接收到 HTTP 请求后,决定如何处理它(静态资源 vs 动态请求)。
- 应用程序池:如果是 ASP.NET 请求,IIS 通过 Application Pool 将请求转发给 ASP.NET 运行时。
- ASP.NET 管道:请求经过
HttpRuntime
,最终进入 ASP.NET MVC 框架处理流程。
2. ASP.NET MVC 处理流程
-
Routing(路由匹配)
RouteTable
由Application_Start
方法在Global.asax
中初始化。- 请求通过
UrlRoutingModule
解析,并匹配到RouteConfig
中定义的路由规则。
-
Controller 创建
MvcHandler
通过IControllerFactory
实例化 Controller。- 默认使用
DefaultControllerFactory
进行创建。
-
Action 方法执行
ControllerActionInvoker
调用对应的 Action 方法,支持依赖注入和参数绑定(Model Binding)。
-
执行过滤器(Filters)(生命周期钩子)
ASP.NET MVC 提供了 4 种过滤器:- Authorization Filters (
AuthorizeAttribute
) – 检查用户权限。 - Action Filters (
OnActionExecuting
/OnActionExecuted
) – 在 Action 执行前后触发。 - Result Filters (
OnResultExecuting
/OnResultExecuted
) – 在视图返回前后触发。 - Exception Filters (
OnException
) – 捕获异常并处理。
- Authorization Filters (
-
返回 ActionResult
ViewResult
(返回视图)。JsonResult
(返回 JSON 数据)。RedirectResult
(跳转到其他 URL)。
-
View 视图引擎渲染
- MVC 默认使用 Razor 视图引擎 解析
cshtml
页面。 - 视图引擎通过
ViewData
/ViewBag
或Model
渲染数据。
- MVC 默认使用 Razor 视图引擎 解析
-
响应返回给客户端
Response
对象封装最终的 HTML 或 JSON 结果返回给客户端。
ASP.NET Web API 执行流程
Web API 的执行流程与 MVC 类似,但更轻量级,适用于 RESTful 服务。
1. 请求进入 IIS 和 ASP.NET 运行时
- IIS 接收 HTTP 请求,并将其传递给 ASP.NET 运行时(或 Kestrel 在 .NET Core)。
- 请求进入 ASP.NET 管道,并通过
HttpServer
交由 Web API 处理。
2. 路由匹配
- Web API 使用
WebApiConfig
进行路由配置(基于RouteAttribute
或MapHttpRoute
)。 HttpRoutingDispatcher
解析路由信息,确定请求的 Controller 和 Action。
3. 创建 Controller 并调用 Action
IHttpControllerActivator
负责创建 Web API Controller(支持依赖注入)。ApiControllerActionInvoker
负责执行 Action 方法。- 参数绑定(Model Binding):基于
FromBody
、FromUri
进行数据解析。
4. 过滤器执行(类似 MVC)
- Authentication Filters(认证)。
- Authorization Filters(授权)。
- Action Filters(执行前后逻辑)。
- Exception Filters(错误处理)。
5. 执行 Action 逻辑,返回 IHttpActionResult
IHttpActionResult
作为标准返回类型,支持Ok()
,BadRequest()
,NotFound()
,Json()
等方法。- 结果经过
ContentNegotiation
(内容协商),决定返回 JSON、XML 或其他格式的数据。
6. 响应返回给客户端
HttpResponseMessage
通过HttpControllerDispatcher
返回给HttpServer
。- HTTP 响应最终返回到客户端。
ASP.NET MVC 和 Web API 的主要区别
关键点 | ASP.NET MVC | ASP.NET Web API |
---|---|---|
适用场景 | Web 应用,返回 HTML | RESTful API,返回 JSON/XML |
控制器基类 | Controller |
ApiController |
视图支持 | 支持 Razor 视图引擎 | 无视图,仅返回数据 |
结果类型 | ActionResult |
IHttpActionResult 或 HttpResponseMessage |
过滤器 | ActionFilterAttribute |
ActionFilterAttribute (但作用于 API 级别) |
路由方式 | routes.MapRoute |
config.MapHttpRoute |
Model Binding | 主要绑定 Form 数据 |
FromBody , FromUri , Model Binding |
面试高频问题
-
ASP.NET MVC 和 Web API 的核心区别?
- MVC 主要用于返回 HTML,适用于 Web 应用。
- Web API 主要用于 RESTful 服务,返回 JSON/XML 等格式的数据。
-
MVC 过滤器(Filters)有哪些?
Authorization Filters
(权限验证)。Action Filters
(Action 执行前后)。Result Filters
(Result 生成前后)。Exception Filters
(异常处理)。
-
Web API 的 Model Binding 方式有哪些?
FromUri
(从 URL 解析参数)。FromBody
(从请求体解析参数)。Model Binding
(自动解析complex type
参数)。
-
ASP.NET MVC 和 Web API 的路由机制有什么区别?
- MVC 采用
routes.MapRoute
,基于Controller
和Action
。 - Web API 采用
config.MapHttpRoute
,更适用于 RESTful 设计。
- MVC 采用
-
如何在 Web API 中实现内容协商(Content Negotiation)?
- 通过
Accept
头自动匹配 JSON 或 XML 返回格式。 - 可以自定义
MediaTypeFormatter
以支持自定义格式。
- 通过
如果是高阶面试,还可以深入 中间件、身份验证(JWT)、异常处理、DI 依赖注入、性能优化(如缓存、压缩) 等内容。