基于.Net Framework的asp.net mvc 和Web API执行流程和周期

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 处理流程

  1. Routing(路由匹配)

    • RouteTableApplication_Start 方法在 Global.asax 中初始化。
    • 请求通过 UrlRoutingModule 解析,并匹配到 RouteConfig 中定义的路由规则。
  2. Controller 创建

    • MvcHandler 通过 IControllerFactory 实例化 Controller
    • 默认使用 DefaultControllerFactory 进行创建。
  3. Action 方法执行

    • ControllerActionInvoker 调用对应的 Action 方法,支持依赖注入和参数绑定(Model Binding)。
  4. 执行过滤器(Filters)(生命周期钩子)
    ASP.NET MVC 提供了 4 种过滤器:

    • Authorization Filters (AuthorizeAttribute) – 检查用户权限。
    • Action Filters (OnActionExecuting / OnActionExecuted) – 在 Action 执行前后触发。
    • Result Filters (OnResultExecuting / OnResultExecuted) – 在视图返回前后触发。
    • Exception Filters (OnException) – 捕获异常并处理。
  5. 返回 ActionResult

    • ViewResult(返回视图)。
    • JsonResult(返回 JSON 数据)。
    • RedirectResult(跳转到其他 URL)。
  6. View 视图引擎渲染

    • MVC 默认使用 Razor 视图引擎 解析 cshtml 页面。
    • 视图引擎通过 ViewData / ViewBagModel 渲染数据。
  7. 响应返回给客户端

    • 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 进行路由配置(基于 RouteAttributeMapHttpRoute)。
  • HttpRoutingDispatcher 解析路由信息,确定请求的 ControllerAction

3. 创建 Controller 并调用 Action

  • IHttpControllerActivator 负责创建 Web API Controller(支持依赖注入)。
  • ApiControllerActionInvoker 负责执行 Action 方法
  • 参数绑定(Model Binding):基于 FromBodyFromUri 进行数据解析。

4. 过滤器执行(类似 MVC)

  • Authentication Filters(认证)。
  • Authorization Filters(授权)。
  • Action Filters(执行前后逻辑)。
  • Exception Filters(错误处理)。

5. 执行 Action 逻辑,返回 IHttpActionResult

  • IHttpActionResult 作为标准返回类型,支持 Ok(), BadRequest(), NotFound(), Json() 等方法。
  • 结果经过 ContentNegotiation(内容协商),决定返回 JSONXML 或其他格式的数据。

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 IHttpActionResultHttpResponseMessage
过滤器 ActionFilterAttribute ActionFilterAttribute(但作用于 API 级别)
路由方式 routes.MapRoute config.MapHttpRoute
Model Binding 主要绑定 Form 数据 FromBody, FromUri, Model Binding

面试高频问题

  1. ASP.NET MVC 和 Web API 的核心区别?

    • MVC 主要用于返回 HTML,适用于 Web 应用。
    • Web API 主要用于 RESTful 服务,返回 JSON/XML 等格式的数据。
  2. MVC 过滤器(Filters)有哪些?

    • Authorization Filters(权限验证)。
    • Action Filters(Action 执行前后)。
    • Result Filters(Result 生成前后)。
    • Exception Filters(异常处理)。
  3. Web API 的 Model Binding 方式有哪些?

    • FromUri(从 URL 解析参数)。
    • FromBody(从请求体解析参数)。
    • Model Binding(自动解析 complex type 参数)。
  4. ASP.NET MVC 和 Web API 的路由机制有什么区别?

    • MVC 采用 routes.MapRoute,基于 ControllerAction
    • Web API 采用 config.MapHttpRoute,更适用于 RESTful 设计。
  5. 如何在 Web API 中实现内容协商(Content Negotiation)?

    • 通过 Accept 头自动匹配 JSON 或 XML 返回格式。
    • 可以自定义 MediaTypeFormatter 以支持自定义格式。

如果是高阶面试,还可以深入 中间件、身份验证(JWT)、异常处理、DI 依赖注入、性能优化(如缓存、压缩) 等内容。

猜你喜欢

转载自blog.csdn.net/WuLex/article/details/146894106
今日推荐