c# – 从.Net Core 2.0中的IActionFilter获取HttpStatus代码
作者:互联网
我在ASP.NET核心2.0中有过滤器属性,请参阅下面的我的代码片段.这里的问题是我总是得到状态码是200.
即使实际状态代码是500,那么我也得到200.如何获得实际状态代码?
public void OnActionExecuted(ActionExecutedContext context)
{
try
{
var controller = context.Controller as APIServiceBase;
var statusCode = controller.Response.StatusCode;
..
..
}
catch { }
}
解决方法:
这是一个有趣的问题.动作过滤器在动作本身之后执行.问题是该操作返回的IActionResult尚未在此阶段执行.您可以通过返回IActionResult的自定义实现并检查其操作过滤器的OnActionExecuted()之后执行其ExecuteResultAsync方法来检查它.
由于响应由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()之前添加它.如果需要,您可以将委托逻辑包装到单独的类中.
标签:c,asp-net-core,asp-net-core-2-0,asp-net-core-webapi 来源: https://codeday.me/bug/20190522/1153105.html