ZetCode

ASP.NET Bind

最后修改于 2025 年 4 月 3 日

在本文中,我们将探讨 ASP.NET 8 中的 Bind 属性。此属性用于 ASP.NET 应用程序中的模型绑定,将请求数据映射到复杂对象。

ASP.NET 是一个跨平台、高性能的框架,用于构建现代 Web 应用程序。Bind 属性提供对模型绑定行为的控制。

基本定义

ASP.NET 中的 Bind 属性指定在模型绑定期间应包含或排除模型中的哪些属性。这有助于防止过度发布攻击。

模型绑定是将 HTTP 请求数据映射到操作方法参数的过程。Bind 属性为开发人员提供了对该过程的细粒度控制。

当您想限制可以从用户输入绑定的属性时,Bind 特别有用。这对于 Web 应用程序的安全性很重要。

ASP.NET Bind 示例

以下示例演示了如何在 ASP.NET 控制器中使用 Bind 属性来控制模型绑定。

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

var app = builder.Build();

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

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

Models/User.cs
public class User
{
    public int Id { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public bool IsAdmin { get; set; }
    public DateTime CreatedDate { get; set; }
}

此 User 模型包含我们想要在绑定期间控制的几个属性。IsAdmin 等某些属性不应由用户设置。

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

[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
    private static List<User> _users = new();

    [HttpPost]
    public IActionResult CreateUser([Bind("Username,Password")] User user)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        user.Id = _users.Count + 1;
        user.CreatedDate = DateTime.UtcNow;
        user.IsAdmin = false;
        
        _users.Add(user);
        
        return CreatedAtAction(nameof(GetUser), 
            new { id = user.Id }, user);
    }

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

在此控制器中,CreateUser 操作使用 Bind 属性指定仅 Username 和 Password 属性应从请求中绑定。

这可以防止恶意用户通过请求设置 IsAdmin 或 CreatedDate。其他属性在操作方法中以编程方式设置。

Bind 属性接受逗号分隔的属性名称列表以包含。或者,您可以使用 Bind(Exclude = "property") 来排除特定属性。

此示例通过限制可以通过模型绑定设置的属性来演示安全最佳实践。它防止了用户试图设置他们不应访问的属性的过度发布攻击。

来源

Microsoft ASP.NET 模型绑定文档

在本文中,我们探讨了 ASP.NET 8 中的 Bind 属性。此强大功能通过控制模型绑定来帮助保护您的应用程序。

作者

我叫 Jan Bodnar,是一名充满激情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出所有 ASP.NET 教程