WEB API新建API的常规方法_vs2022 web code api
vs2022 如何新建一条自己的web api 注意已经创建了一个默认的 ASP.NET CORE WEB API项目 同时帮我详细演示 POST、PUT、DELETE 以及其他方法
在 VS2022 中创建自定义 Web API 及各种 HTTP 方法演示
下面我将详细演示如何在已有的 ASP.NET Core Web API 项目中添加自定义 API 控制器,并实现 GET、POST、PUT、DELETE 等 HTTP 方法。
- 创建新的 API 控制器
在解决方案资源管理器中,右键点击 Controllers 文件夹
选择\"添加\" > “控制器”
选择\"API 控制器 - 空\"
命名为 ProductsController.cs (这里以产品 API 为例)
点击\"添加\"
- 基本控制器结构
首先,我们创建一个简单的 Product 模型类。在 Models 文件夹中添加 Product.cs:
namespace YourProjectName.Models{ public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } }}
- 实现各种 HTTP 方法的完整控制器
以下是 ProductsController.cs 的完整代码,包含各种 HTTP 方法:
using Microsoft.AspNetCore.Mvc;using YourProjectName.Models;using System.Collections.Generic;using System.Linq;namespace YourProjectName.Controllers{ [Route(\"api/[controller]\")] [ApiController] public class ProductsController : ControllerBase { // 模拟数据存储 - 实际项目中应该使用数据库 private static List<Product> _products = new List<Product> { new Product { Id = 1, Name = \"Laptop\", Price = 999.99m }, new Product { Id = 2, Name = \"Smartphone\", Price = 699.99m }, new Product { Id = 3, Name = \"Tablet\", Price = 499.99m } }; // GET: api/products [HttpGet] public ActionResult<IEnumerable<Product>> Get() { return Ok(_products); } // GET api/products/5 [HttpGet(\"{id}\")] public ActionResult<Product> Get(int id) { var product = _products.FirstOrDefault(p => p.Id == id); if (product == null) { return NotFound(); } return Ok(product); } // POST api/products [HttpPost] public ActionResult<Product> Post([FromBody] Product product) { // 验证模型 if (!ModelState.IsValid) { return BadRequest(ModelState); } // 生成新ID var newId = _products.Max(p => p.Id) + 1; product.Id = newId; _products.Add(product); // 返回201 Created 状态码,并在Location头中包含新资源的URI return CreatedAtAction(nameof(Get), new { id = product.Id }, product); } // PUT api/products/5 [HttpPut(\"{id}\")] public IActionResult Put(int id, [FromBody] Product product) { if (id != product.Id) { return BadRequest(); } var existingProduct = _products.FirstOrDefault(p => p.Id == id); if (existingProduct == null) { return NotFound(); } existingProduct.Name = product.Name; existingProduct.Price = product.Price; return NoContent(); // 204 No Content } // DELETE api/products/5 [HttpDelete(\"{id}\")] public IActionResult Delete(int id) { var product = _products.FirstOrDefault(p => p.Id == id); if (product == null) { return NotFound(); } _products.Remove(product); return NoContent(); // 204 No Content } // GET api/products/search?name=xxx (自定义查询) [HttpGet(\"search\")] public ActionResult<IEnumerable<Product>> SearchByName([FromQuery] string name) { var results = _products.Where(p => p.Name.Contains(name, System.StringComparison.OrdinalIgnoreCase)); if (!results.Any()) { return NotFound(); } return Ok(results); } // GET api/products/expensive (自定义路由) [HttpGet(\"expensive\")] public ActionResult<Product> GetMostExpensive() { var product = _products.OrderByDescending(p => p.Price).FirstOrDefault(); if (product == null) { return NotFound(); } return Ok(product); } }}
- 测试 API 的方法
使用 Swagger/OpenAPI 测试
如果项目已经配置了 Swagger(默认模板通常包含):
运行项目 (F5 或 Ctrl+F5)
浏览器打开 https://localhost:port/swagger
你会看到 Products 控制器和所有端点
可以点击每个端点进行测试
使用 Postman 测试
GET 所有产品:
方法: GET
URL: https://localhost:port/api/products
GET 单个产品:
方法: GET
URL: https://localhost:port/api/products/1
POST 创建新产品:
方法: POST
URL: https://localhost:port/api/products
Headers: Content-Type: application/json
Body (raw JSON):
{ \"name\": \"Headphones\", \"price\": 199.99}
PUT 更新产品:
方法: PUT
URL: https://localhost:port/api/products/1
Headers: Content-Type: application/json
Body (raw JSON):
{
“id”: 1,
“name”: “Updated Laptop”,
“price”: 1099.99
}
DELETE 删除产品:
方法: DELETE
URL: https://localhost:port/api/products/1
自定义查询:
方法: GET
URL: https://localhost:port/api/products/search?name=phone
自定义路由:
方法: GET
URL: https://localhost:port/api/products/expensive
- 重要注意事项
路由属性:
[Route(“api/[controller]”)] 设置基础路由为 api/products
方法上的 [HttpGet], [HttpPost] 等属性定义特定端点
返回类型:
使用 ActionResult 可以明确返回类型和状态码
常用返回方法:
Ok(result) - 200 OK
CreatedAtAction() - 201 Created
NoContent() - 204 No Content
BadRequest() - 400 Bad Request
NotFound() - 404 Not Found
模型验证:
[ApiController] 属性自动启用模型验证
可以通过 ModelState.IsValid 检查
异步方法:
实际项目中应该使用异步方法,例如:
[HttpGet]
public async Task<ActionResult> Get()
{
return Ok(await _productService.GetAllAsync());
}
依赖注入:
实际项目中应该通过构造函数注入服务,而不是使用静态列表
希望这个详细演示能帮助你理解如何在 ASP.NET Core Web API 中实现各种 HTTP 方法!