Asp.net core 访问IHttpContextAccessor操作过滤器-危险吗?

Asp.net core 访问IHttpContextAccessor操作过滤器-危险吗?,asp.net-core,Asp.net Core,David Fowler和Damian Edwards最近在@NDC London上做了一次关于调试asp.net core 2.0的演讲 ,它们警告执行异步操作的控制器操作方法,然后尝试访问IHttpContextAccessor,基本上它不是线程安全的 我想知道这是否只适用于动作方法,在异步动作过滤器中这样做是否安全(我有类似的东西可以在每个请求上运行): 问题是如何从多个线程并行访问HttpContext。演讲中的例子描述了由于IHttpContextAccessor,有时很难判断什么在访

David Fowler和Damian Edwards最近在@NDC London上做了一次关于调试asp.net core 2.0的演讲

,它们警告执行异步操作的控制器操作方法,然后尝试访问
IHttpContextAccessor
,基本上它不是线程安全的

我想知道这是否只适用于动作方法,在异步动作过滤器中这样做是否安全(我有类似的东西可以在每个请求上运行):


问题是如何从多个线程并行访问HttpContext。演讲中的例子描述了由于IHttpContextAccessor,有时很难判断什么在访问HttpContext。您上面的代码运行良好,一个线程一次访问HttpContext(尽管您在筛选器中不需要它,因为MVC通过适当的筛选器上下文将其提供给您)。

虽然我知道您试图得到的答案是什么。我认为没有必要在过滤器中使用访问器,因为
ActionExecutingContext
已经继承了一个
HttpContext
属性,这使得访问器冗余。好的,在观看了2x的演讲后,我可以告诉您我收集有关警告的主要原因是因为没有asp.net-core中的同步上下文。因此,在尝试通过异步函数中的访问器访问HttpContext时,也会出现同样的线程安全问题。而且访问器还隐藏错误,使调试问题变得困难。@Nkosi是的,这是有道理的。。我也是这么想的,但我想澄清一下,因为后果可能相当严重。
public class SampleAttribute : IAsyncActionFilter
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public LoggedInUserAttribute(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    public async Task OnActionExecutionAsync(ActionExecutingContext filterContext, ActionExecutionDelegate next)
    {
        // Do something IO-bound more useful than...
        await Task.Delay(1000);

        // Then set something on the IHttpContextAccessor...
        _httpContextAccessor.HttpContext.Items["Something"] = "Hello";

        await next();
    }

}