我正在尝试访问Request
派生类中的ApiController
属性。
出于某种原因,Request
方法中ExecuteAsync
为空。我已经看到了其他问题,所以在你问之前:
ExecuteAsync
方法之前,我的请求通过委托处理程序,在委托处理程序中,我的请求对象存在(我甚至添加了一些属性没有任何问题)。return await base.SendAsync(request, cancellationToken);
没有问题,request
存在。HttpContext.Current.Request
不为空且可以无问题地访问。RequestContext
不为空且可以无问题地访问。Request
为空。为什么会发生这种情况?我在Web API 2.2(和MVC 5,如果相关)。
答案 0 :(得分:3)
这可能是因为您在使用async / await时尝试访问HttpContext。
所以,你有两个选择:
您可以在此处阅读更多内容 - Using HttpContext Safely After Async in ASP.NET MVC Applications。
为了更好地了解幕后发生的事情,我建议:
在非常高的级别:在同步服务器实现中,整个请求由同一个线程处理,执行上下文使用TLS(线程本地存储)存储,意味着HttpContext在代码中的任何位置都可用。 / p>
在异步服务器实现(async / await)中,请求可能由多个线程处理,并且需要在这些线程之间传递执行上下文。