ASP.NET NonAction
最后修改于 2025 年 4 月 3 日
在本文中,我们将探讨 ASP.NET 8 中的 NonAction 属性。此属性用于防止公共控制器方法被视为操作方法。
ASP.NET 是一个跨平台、高性能的框架,用于构建现代 Web 应用程序。NonAction 属性有助于有效组织控制器代码。
基本定义
ASP.NET 中的 NonAction 属性表示公共控制器方法不应被视为操作方法。这可以防止它通过路由请求被调用。
默认情况下,控制器类中的所有公共方法都被视为操作方法。NonAction 允许您将特定方法排除在此行为之外。
当您需要在控制器中提供不应直接通过 HTTP 请求调用的辅助方法时,NonAction 会很有用。它是 ASP.NET 控制器体系结构的一部分。
ASP.NET NonAction 示例
以下示例演示了一个使用 NonAction 的 Web API 控制器。
Program.cs
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); var app = builder.Build(); app.MapControllers(); app.Run();
这设置了一个基本的 ASP.NET 应用程序,并支持控制器。MapControllers
方法为控制器启用属性路由。
Controllers/ProductsController.cs
using Microsoft.AspNetCore.Mvc; [ApiController] [Route("api/[controller]")] public class ProductsController : ControllerBase { private static List<Product> _products = new() { new Product(1, "Laptop", 999.99m), new Product(2, "Mouse", 19.99m), new Product(3, "Keyboard", 49.99m) }; [HttpGet] public IActionResult GetAllProducts() { return Ok(_products); } [HttpGet("{id}")] public IActionResult GetProductById(int id) { var product = FindProductById(id); if (product == null) return NotFound(); return Ok(product); } [NonAction] public Product? FindProductById(int id) { return _products.FirstOrDefault(p => p.Id == id); } [NonAction] public void LogProductAccess(string productName) { Console.WriteLine($"Product accessed: {productName}"); } } public record Product(int Id, string Name, decimal Price);
此控制器演示了 NonAction 有用的两种场景。FindProductById
方法是操作方法使用的辅助方法。
LogProductAccess
方法展示了另一个常见的用例 - 一个不应作为端点公开的实用方法。两者都已标记为 NonAction。
如果没有 NonAction 属性,这些方法将作为可以通过 HTTP 请求访问的操作方法公开。该属性可以防止这种暴露。
该示例展示了 NonAction 如何通过在同一类中分离操作方法和辅助方法来帮助组织控制器代码。
来源
在本文中,我们探讨了 ASP.NET 8 中的 NonAction 属性。这项有用的功能通过隐藏方法来帮助维护干净的控制器架构。