ASP.NET ResultFilter
最后修改于 2025 年 4 月 3 日
在本文中,我们将探讨 ASP.NET 8 中的 ResultFilter。Result filters 允许您在 ASP.NET Core 中执行操作结果之前或之后运行代码。
ASP.NET filters 提供了一种在请求处理管道的特定阶段运行代码的方法。Result filters 对于修改响应或添加标头特别有用。
基本定义
ASP.NET Core 中的 ResultFilter 是一种操作过滤器,它在操作结果执行之前或之后运行代码。它实现了 IResultFilter 或 IAsyncResultFilter 接口。
Result filters 在操作方法完成后但在结果处理之前执行。它们可以修改响应或短路执行。
常见用例包括响应格式化、添加标头、日志记录或修改响应内容。Result filters 对成功和失败的操作结果都会运行。
ASP.NET ResultFilter 示例
以下示例演示了在 ASP.NET 8 中创建和使用自定义 ResultFilter 来添加响应标头。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers(options =>
{
options.Filters.Add<AddCustomHeadersFilter>();
});
var app = builder.Build();
app.MapControllers();
app.Run();
这将配置应用程序全局使用我们的自定义 ResultFilter。该过滤器将应用于所有控制器操作。
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
public class AddCustomHeadersFilter : IResultFilter
{
public void OnResultExecuting(ResultExecutingContext context)
{
// Runs before the action result executes
if (context.HttpContext.Response.Headers.ContainsKey("X-Custom-Header"))
{
context.HttpContext.Response.Headers.Remove("X-Custom-Header");
}
context.HttpContext.Response.Headers.Add(
"X-Custom-Header", "Custom-Value");
context.HttpContext.Response.Headers.Add(
"X-Response-Time", DateTime.UtcNow.ToString());
}
public void OnResultExecuted(ResultExecutedContext context)
{
// Runs after the action result executes
// Can be used for cleanup or logging
}
}
此过滤器会为每个响应添加两个自定义标头。OnResultExecuting 方法在结果执行之前运行,而 OnResultExecuted 在结果执行之后运行。
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
[HttpGet]
public IActionResult Get()
{
return Ok(new { Name = "Product 1", Price = 19.99 });
}
}
当您调用 /api/products 端点时,响应将包含我们过滤器添加的自定义标头。这演示了 ResultFilters 如何修改响应。
该示例显示了一个全局过滤器,但您也可以使用 [ServiceFilter] 或 [TypeFilter] 属性将 ResultFilters 应用于特定控制器或操作。
来源
在本文中,我们探讨了 ASP.NET 8 中的 ResultFilter。此强大功能允许您拦截和修改 Web 应用程序中的响应。