ZetCode

ASP.NET BadRequest

最后修改于 2025 年 4 月 3 日

在本文中,我们将探讨 ASP.NET 8 中的 BadRequest 响应。此响应对于处理 RESTful API 和 Web 服务中的客户端错误至关重要。

ASP.NET 是一个跨平台、高性能的框架,用于构建现代 Web 应用程序。BadRequest 辅助方法简化了错误处理。

基本定义

ASP.NET 中的 BadRequest 方法返回 HTTP 400 状态码响应。这表示服务器由于客户端错误而无法处理请求。

BadRequest 通常在客户端输入验证失败时使用。它可以返回一个简单的状态码,或者在响应体中包含其他错误详细信息。

在 ASP.NET Core 中,BadRequest 可通过 ControllerBase 类获得。它通常在 Web API 控制器中用于处理无效请求。

ASP.NET BadRequest 示例

以下示例演示了一个使用 BadRequest 的 Web API 控制器。

Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();

var app = builder.Build();

app.MapControllers();
app.Run();

这设置了一个基本的 ASP.NET 应用程序,并支持控制器。MapControllers 方法为控制器启用属性路由。

Controllers/UsersController.cs
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
    private static List<User> _users = new()
    {
        new User(1, "john_doe", "john@example.com"),
        new User(2, "jane_smith", "jane@example.com")
    };

    [HttpPost]
    public IActionResult CreateUser([FromBody] UserCreateRequest request)
    {
        if (string.IsNullOrWhiteSpace(request.Username))
        {
            return BadRequest("Username is required");
        }

        if (string.IsNullOrWhiteSpace(request.Email))
        {
            return BadRequest("Email is required");
        }

        if (!request.Email.Contains('@'))
        {
            return BadRequest("Invalid email format");
        }

        if (_users.Any(u => u.Username == request.Username))
        {
            return BadRequest("Username already exists");
        }

        var newUser = new User(
            _users.Max(u => u.Id) + 1,
            request.Username,
            request.Email);

        _users.Add(newUser);
        return CreatedAtAction(nameof(GetUserById), 
            new { id = newUser.Id }, newUser);
    }

    [HttpGet("{id}")]
    public IActionResult GetUserById(int id)
    {
        var user = _users.FirstOrDefault(u => u.Id == id);
        if (user == null) return NotFound();
        return Ok(user);
    }
}

public record User(int Id, string Username, string Email);
public record UserCreateRequest(string Username, string Email);

此控制器演示了多种 BadRequest 情况。CreateUser 操作会验证请求,并对无效输入返回适当的 400 响应。

第一个验证检查用户名是否为空。第二个检查电子邮件是否为空。第三个验证电子邮件格式。第四个防止用户名重复。

每次验证失败都会返回一个带有描述性消息的 BadRequest。ApiController 属性启用自动模型状态验证。

当所有验证都通过时,该操作将创建用户并返回 201 Created。这显示了 BadRequest 与正确的 RESTful 状态码在错误处理方面的配合使用。

来源

Microsoft ASP.NET Web API 文档

在本文中,我们探讨了 ASP.NET 8 中的 BadRequest 响应。此重要功能有助于构建具有适当错误处理的健壮 API。

作者

我的名字是 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在教授编程方面拥有超过十年的经验。

列出所有 ASP.NET 教程