asp.net core api RESTful 风格控制器

在 ASP.NET Core API 中,遵循 RESTful 风格的控制器一般具备以下几个关键特征:

✅ RESTful 风格控制器的命名规范

控制器命名

  • 使用 复数名词 ,表示资源集合,如 ProductsController、UsersController。

路由风格

  • 路由使用 [Route("api/[controller]")],自动绑定控制器名。

  • 路由中不包含动词,操作由 HTTP 方法来表达。

cs 复制代码
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
    // 示例方法如下
}

✅ RESTful 对应的 HTTP 方法与语义

HTTP 方法 路由示例 含义
GET /api/products 获取所有产品
GET /api/products/1 获取 ID 为 1 的产品
POST /api/products 新建产品
PUT /api/products/1 更新 ID 为 1 的产品
DELETE /api/products/1 删除 ID 为 1 的产品

✅ 示例控制器代码

cs 复制代码
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
    // GET: api/products
    [HttpGet]
    public IActionResult GetAll()
    {
        var products = new List<string> { "Apple", "Banana", "Orange" };
        return Ok(products);
    }

    // GET: api/products/5
    [HttpGet("{id}")]
    public IActionResult GetById(int id)
    {
        var product = $"Product {id}";
        return Ok(product);
    }

    // POST: api/products
    [HttpPost]
    public IActionResult Create([FromBody] string product)
    {
        // 假设添加成功
        return CreatedAtAction(nameof(GetById), new { id = 123 }, product);
    }

    // PUT: api/products/5
    [HttpPut("{id}")]
    public IActionResult Update(int id, [FromBody] string product)
    {
        // 假设更新成功
        return NoContent();
    }

    // DELETE: api/products/5
    [HttpDelete("{id}")]
    public IActionResult Delete(int id)
    {
        // 假设删除成功
        return NoContent();
    }
}

✅ RESTful 最佳实践

  1. 使用状态码准确表达结果

    200 OK, 201 Created, 204 No Content, 400 Bad Request, 404 Not Found 等。

  2. 请求体与响应体结构统一

    推荐使用统一格式返回结果(如包裹成标准响应结构)。

  3. 避免在 URL 中加入动词

    错误示例:/api/getProductById/1

  4. 使用分页查询时,遵循统一格式

    /api/products?page=1&pageSize=10

相关推荐
卷无止境20 分钟前
SALib敏感性分析的python库学习笔记
后端·python
ServBay21 分钟前
从 Val Town 停服看,代码能下载不代表项目能搬家
后端·sqlite
我不会起名字3222 小时前
seq 空洞排查:Mongo 的 51 只是预留上界,Redis CURR 才是已消耗边界
redis·后端·mongodb·go·即时通讯·im·故障排查
特立独行的猫A2 小时前
少 3 个环节、少 1 次 ABI、少 3500 行代码:cj-tauri 与 Ionic/Capacitor 的鸿蒙桥接机制对比
java·后端·python
学长毕设2 小时前
基于SpringBoot的高校后勤报修管理系统-附源码
java·spring boot·后端
特立独行的猫A2 小时前
cj-tauri vs Rust/Tauri 同款播放器实测:编译 21 秒 vs 11 分钟,磁盘 12 MB vs 1.2 GB
java·后端·python
乐橙开放平台2 小时前
海康和大华摄像头能统一管理吗?可以通过 GB28181 或视频融合平台接入
网络·后端·物联网·音视频
一条Go6 小时前
OnCall 时段路由:跨午夜、左闭右开与「Local 不是时区」
后端·架构·github
Moment6 小时前
不会后期的我,发现了一个开源胶片神器😍😍😍
前端·后端·开源
数据库小学妹6 小时前
pgbouncer 事务池:prepared statement、临时表与会话状态
数据库·后端·postgresql