ASP.NET MVC 与 Web API

Q1: MVC 的路由机制如何工作?Web API 和 MVC 控制器的区别是什么?

1、路由机制:

ASP.NET MVC 的路由系统通过 RouteTable(在 RouteConfig.cs 中配置)将 URL 映射到对应的控制器(Controller)和动作方法(Action)。

默认路由模板是 {controller}/{action}/{id},例如 /Home/Index 会调用 HomeController 的 Index 方法。

路由支持约束(如正则表达式限制参数类型)和自定义路由(通过 [Route] 属性实现特性路由)。

路由匹配时,系统按注册顺序依次尝试匹配,直到找到第一个符合条件的结果。

2、Web API 与 MVC 控制器的区别:

(1)用途:

MVC 控制器主要用于返回视图(HTML)和处理页面逻辑。

Web API 控制器用于构建 RESTful 服务,返回数据(JSON/XML),通常供客户端(如前端、移动端)消费。

(2)路由:

MVC 默认基于 {controller}/{action} 路由。

Web API 默认基于 HTTP 方法(GET/POST/PUT/DELETE)的路由(如 /api/Users 对应 UsersController 的 Get() 方法)。

(3)请求处理:

MVC 控制器通过 ActionResult 返回视图或数据。

Web API 控制器通过 IActionResult 或直接返回数据(自动序列化为 JSON/XML)。

(4)依赖解析:

Web API 更倾向于依赖注入和无状态设计,适合服务化场景。

Q2: 如何在 ASP.NET Core 中实现依赖注入(DI)?

1、服务注册:

在 Startup.cs 的 ConfigureServices 方法中,通过 services.Add[Lifecycle]<TService, TImplementation>() 注册服务。

(1)生命周期选项:

Singleton:单例,全局唯一实例。

Scoped:作用域内唯一(如一次 HTTP 请求)。

Transient:每次请求创建新实例。

(2)示例:

services.AddScoped<IUserService, UserService>();

2、依赖注入:

在控制器、服务或其他组件中通过构造函数注入:

public class HomeController : Controller
{
    private readonly IUserService _userService;
    public HomeController(IUserService userService)
    {
        _userService = userService;
    }
}

3、高级场景:

手动解析服务:通过 HttpContext.RequestServices.GetService<T>()。

使用第三方容器(如 Autofac、SimpleInjector)替换默认容器。
posted @ 2025-05-28 09:48  青云Zeo  阅读(96)  评论(0)    收藏  举报