ASP.NET AcceptVerbs
最后修改于 2025 年 4 月 3 日
在本文中,我们将探讨 ASP.NET 8 中的 AcceptVerbs 属性。此属性为控制器操作提供了灵活的 HTTP 方法路由。
ASP.NET 是一个用于构建现代 Web 应用程序的跨平台框架。AcceptVerbs 允许将多个 HTTP 方法映射到单个操作。
基本定义
ASP.NET 中的 AcceptVerbs 属性指定哪些 HTTP 方法可以调用特定的操作方法。它比单独的方法属性更灵活。
与 HttpGet 或 HttpPost 不同,AcceptVerbs 可以接受多个 HTTP 方法作为参数。这使其对于处理多种动词类型的操作很有用。
AcceptVerbs 是 ASP.NET 路由系统的一部分。它可与约定路由和属性路由一起使用。该属性可以应用于控制器操作方法。
ASP.NET AcceptVerbs 示例
以下示例演示了使用 AcceptVerbs 的 Web API 控制器。
Program.cs
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); var app = builder.Build(); app.MapControllers(); app.Run();
这设置了一个基本的 ASP.NET 应用程序,并支持控制器。MapControllers 方法为控制器启用属性路由。
Controllers/TasksController.cs
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/[controller]")]
public class TasksController : ControllerBase
{
private static List<TaskItem> _tasks = new()
{
new TaskItem(1, "Buy groceries", false),
new TaskItem(2, "Finish report", true),
new TaskItem(3, "Call client", false)
};
[AcceptVerbs("GET", "HEAD")]
public IActionResult GetAllTasks()
{
return Ok(_tasks);
}
[AcceptVerbs("GET", "HEAD", Route = "{id}")]
public IActionResult GetTaskById(int id)
{
var task = _tasks.FirstOrDefault(t => t.Id == id);
if (task == null) return NotFound();
return Ok(task);
}
[AcceptVerbs("POST", "PUT")]
public IActionResult CreateOrUpdateTask([FromBody] TaskItem task)
{
if (task.Id == 0) // New task
{
task.Id = _tasks.Max(t => t.Id) + 1;
_tasks.Add(task);
return CreatedAtAction(nameof(GetTaskById),
new { id = task.Id }, task);
}
var existing = _tasks.FirstOrDefault(t => t.Id == task.Id);
if (existing == null) return NotFound();
existing.Title = task.Title;
existing.IsComplete = task.IsComplete;
return NoContent();
}
[AcceptVerbs("DELETE", Route = "{id}")]
public IActionResult DeleteTask(int id)
{
var task = _tasks.FirstOrDefault(t => t.Id == id);
if (task == null) return NotFound();
_tasks.Remove(task);
return NoContent();
}
}
public record TaskItem(int Id, string Title, bool IsComplete);
此控制器演示了四种不同的 AcceptVerbs 场景。第一个方法响应 GET 和 HEAD 请求以检索所有任务。
第二个方法也处理 GET 和 HEAD 请求,但针对单个任务。第三种方法结合了 POST 和 PUT 以进行创建/更新操作。
第四种方法使用 DELETE 来删除任务。每种方法根据操作结果返回适当的 HTTP 状态码。
该示例展示了 AcceptVerbs 如何将多个 HTTP 方法合并到单个操作方法中。这减少了代码重复,同时保持了清晰性。
来源
在本文中,我们探讨了 ASP.NET 8 中的 AcceptVerbs 属性。此多功能功能为控制器操作提供了灵活的 HTTP 方法路由。