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 属性来控制模型绑定。
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); var app = builder.Build(); app.MapControllers(); app.Run();
这设置了一个基本的 ASP.NET 应用程序,并支持控制器。MapControllers 方法为控制器启用属性路由。
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 等某些属性不应由用户设置。
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") 来排除特定属性。
此示例通过限制可以通过模型绑定设置的属性来演示安全最佳实践。它防止了用户试图设置他们不应访问的属性的过度发布攻击。
来源
在本文中,我们探讨了 ASP.NET 8 中的 Bind 属性。此强大功能通过控制模型绑定来帮助保护您的应用程序。