ASP.NET Forbid
最后修改于 2025 年 4 月 3 日
在本文中,我们将探讨 ASP.NET 8 中的 Forbid 方法。此方法对于处理 Web 应用程序中的授权失败至关重要。
ASP.NET 是一个跨平台、高性能的框架,用于构建现代 Web 应用程序。Forbid 方法有助于以标准化方式管理访问控制。
基本定义
ASP.NET 中的 Forbid 方法返回 403 Forbidden HTTP 状态码。这表明服务器理解请求但拒绝授权。
与 Unauthorized (401) 不同,Forbid 用于用户已通过身份验证但权限不足的情况。它通常在授权中间件中使用。
Forbid 是 ASP.NET 授权系统的一部分,可与身份验证方案配合使用。如果配置得当,它可以触发身份验证挑战。
ASP.NET Forbid 示例
以下示例演示了如何在带有基于角色的授权的控制器中使用 Forbid。
Program.cs
var builder = WebApplication.CreateBuilder(args); builder.Services.AddAuthentication(); builder.Services.AddAuthorization(); builder.Services.AddControllers(); var app = builder.Build(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.Run();
这设置了一个基本的 ASP.NET 应用程序,具有身份验证和授权。中间件的顺序对于正常功能至关重要。
Controllers/AdminController.cs
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; [ApiController] [Route("api/[controller]")] public class AdminController : ControllerBase { [Authorize(Roles = "Administrator")] [HttpGet("settings")] public IActionResult GetSettings() { return Ok(new { Theme = "Dark", LogLevel = "Debug" }); } [Authorize] [HttpGet("profile")] public IActionResult GetProfile() { if (!User.IsInRole("User") && !User.IsInRole("Administrator")) { return Forbid(); } return Ok(new { Name = "John Doe", Email = "john@example.com" }); } [AllowAnonymous] [HttpGet("status")] public IActionResult GetStatus() { return Ok(new { Status = "Operational" }); } }
此控制器演示了三种不同的授权场景。第一个方法需要管理员角色访问。
第二个方法显示了手动角色检查和 Forbid。如果用户既没有 User 角色也没有 Administrator 角色,则返回 Forbid。
第三种方法可以通过 AllowAnonymous 公开访问。Forbid 响应将触发任何配置的身份验证方案来挑战用户。
该示例展示了如何使用 Forbid 进行细粒度的授权控制。它与 ASP.NET 内置的身份验证和授权系统配合使用。
来源
在本文中,我们探讨了 ASP.NET 8 中的 Forbid 方法。此强大功能有助于在 Web 应用程序中实现强大的授权。