RESTful服务嵌套方法中获取HttpContext.Header的方式及调用有效性疑问
问题解答:在Service中使用HttpContext.Current能否获取正确请求头?
代码示例
[HttpPut, Route("urisuffix")] [Authorization tags] public async Task PutAPI() { return serviceA.PutSomething(); } class serviceA { public async Task PutSomething() { // some code } }
问题
如果在serviceA的PutSomething方法中使用HttpContext.Current,能否获取到API调用传递的正确请求头?
解答
ASP.NET Framework环境:
若为同步调用,或异步调用中正确使用await保证上下文流转,HttpContext.Current可以获取当前请求的上下文,进而拿到正确的请求头。但如果异步代码未正确处理上下文(比如未用await直接返回Task),会导致上下文丢失,此时HttpContext.Current会返回null或错误的上下文。ASP.NET Core环境:
HttpContext.Current已被废弃,无法通过这种方式获取请求上下文。官方推荐通过依赖注入IHttpContextAccessor来获取当前请求的上下文,直接使用HttpContext.Current会返回null,自然无法获取请求头。
另外需要注意:无论哪种框架,都不建议在Service层直接依赖HttpContext——这会让Service层与Web层过度耦合,降低代码的可测试性和复用性。更合理的做法是在Controller层提前提取需要的请求头信息,作为参数传递给Service的方法。
内容的提问来源于stack exchange,提问作者ketan Shah
相关产品推荐
相关产品推荐

