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)替换默认容器。

浙公网安备 33010602011771号