【发布时间】:2021-05-08 20:19:13
【问题描述】:
我有一个 asp .net core web api,我需要在响应中设置一些标头。这基于响应的正文。 (计算md5)
我想在自定义中间件中执行此操作,以便每个请求都具有相同的响应标头。
我尝试了以下设置:
首先我有一个带有简单端点的控制器:
[Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase
{
[HttpGet]
[Route("Test")]
public IActionResult DoTest()
{
var result = new { someProp = "somePropValue" };
return Ok(result);
}
}
我添加了一个自定义中间件类:
public class CustomResponseHandler
{
private readonly RequestDelegate _next;
public CustomResponseHandler(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
await _next(context);
context.Response.Headers.Add("foo", "fii");
}
}
在启动时,我使用 Configure 方法添加了这个中间件:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseMiddleware<CustomResponseHandler>();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
当我运行它时, context.Response.Headers.Add("foo", "fii");行确实被执行了。
从完美的端点返回结果后也会执行。
但是,当我查看响应时,仍然缺少标题“foo”。
有没有办法做到这一点。
我注意到在将结果返回端点之前添加标题时确实得到了标题:
public IActionResult DoTest()
{
var result = new { someProp = "somePropValue" };
Response.Headers.Add("foo", "fii");
return Ok(result);
}
【问题讨论】:
标签: c# asp.net-core .net-core