☰分类导航

软件工程/ASP.NET Web开发
课程进度 31% · 第4/10章第4/10章 · 标签 1/7
— 1 —

MVC控制器

原控制器、Razor与中间件属于不同文件和宿主片段;控制器需AddControllers及MapControllers注册,认证中间件需对应服务。静态内存商品列表仅作教学,不能作为并发生产存储。

ASP.NET Core MVC将应用程序分为模型(Model)、视图(View)和控制器(Controller)三部分。

控制器是HTTP与业务之间的适配边界,不应直接承担所有授权、存储和重试。先写请求DTO和响应契约,说明400、401、403、404与409分别发生在哪一步。返回字符串只是最小演示,客户端需要稳定结构和可判断的失败结果。


```csharp
public class HomeController : Controller {
    public IActionResult Index() {
        return View();
    }

    public IActionResult About() {
        ViewData["Message"] = "关于我们";
        return View();
    }
}
```
csharp
1
public class HomeController : Controller {
2
public IActionResult Index() {
3
return View();
4
}
5
 
6
public IActionResult About() {
7
ViewData["Message"] = "关于我们";
8
return View();
9
}
10
}

📖Controller 负责处理 HTTP 请求,调用业务逻辑,返回视图或数据

— 2 —

Web API

使用ASP.NET Core可以快速构建RESTful API服务,支持JSON序列化和路由映射。

创建接口返回201时要提供可实际读取的资源位置;绑定成功仍需校验标题与资源归属。不要直接接受整个数据库实体,尤其OwnerId、审核状态和内部字段应由服务端控制。静态List适合学习路由,无法保证并发、多实例和重启后的事实一致。


```csharp
[ApiController]
[Route("api/[controller]")]
public class UserController : ControllerBase {
    [HttpGet]
    public IEnumerable<string> Get() => new[] { "Tom", "Jerry" };

    [HttpGet("{id}")]
    public string Get(int id) => $"User {id}";

    [HttpPost]
    public IActionResult Create([FromBody] User user) {
        return CreatedAtAction(nameof(Get), new { id = user.Id }, user);
    }
}
```
csharp
1
[ApiController]
2
[Route("api/[controller]")]
3
public class UserController : ControllerBase {
4
[HttpGet]
5
public IEnumerable<string> Get() => new[] { "Tom", "Jerry" };
6
 
7
[HttpGet("{id}")]
8
public string Get(int id) => $"User {id}";
9
 
10
[HttpPost]
11
public IActionResult Create([FromBody] User user) {
12
return CreatedAtAction(nameof(Get), new { id = user.Id }, user);
13
}
14
}
MVCAPIREST控制器路由JSON