gpt4 book ai didi

c# - 从 .Net Core 2.0 中的 IActionFilter 获取 HttpStatus 代码

转载 作者:太空狗 更新时间:2023-10-29 23:20:06 26 4
gpt4 key购买 nike

我在 ASP.NET core 2.0 中有过滤器属性,请参阅下面的代码片段。这里的问题是我总是得到状态代码是 200。

即使实际状态码是 500,我也会得到 200。如何获取实际状态码?

public void OnActionExecuted(ActionExecutedContext context)
{
try
{
var controller = context.Controller as APIServiceBase;
var statusCode = controller.Response.StatusCode;
..
..
}
catch { }

}

最佳答案

一个很有趣的问题。 Action 过滤器在 Action 本身之后执行。问题是 Action 返回的 IActionResult 在这个阶段还没有执行。您可以通过返回 IActionResult 的自定义实现并检查其 ExecuteResultAsync 方法是否在操作过滤器的 OnActionExecuted() 之后执行来检查它。

由于响应由 IActionResult(包括状态代码)填充,您不应期望 Response.StatusCode 已在操作过滤器中设置。

要解决此问题,您应该稍后在 ASP.Net Core 管道中执行您的逻辑,操作过滤器不适合它。您可以在请求管道中添加自定义中间件(Startup.Configure() 方法):

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.Use(async (context, next) =>
{
await next.Invoke();
var statusCode = context.Response.StatusCode;
// ...
});

app.UseMvc();
}

确保在调用 app.UseMvc() 之前添加它。如果需要,您可以将委托(delegate)逻辑包装到单独的类中。

关于c# - 从 .Net Core 2.0 中的 IActionFilter 获取 HttpStatus 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49371900/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com