在自托管的WebApi中获取HttpRequest上下文

本文关键字:获取 HttpRequest 上下文 WebApi | 更新日期: 2023-09-27 17:53:21

如何从自托管MVC WebAPI访问查询字符串?

调用NRE失败,因为Current是空的。null)

System.Web.HttpContext.Current.Request["myQuery"]

我需要访问控制器外部的当前上下文,因为我想通过控制对象实例化。DI。如:

        container
            .RegisterType<MyObject>(
                new InjectionFactory(
                    uc =>
                        new MyObject(
                            System.Web.HttpContext.Current.Request["myParam"]) //This failed.
                    ));

由于上述NRE,从ControllerApi代码内部调用container.Resolve<MyObject>()失败。

在自托管的WebApi中获取HttpRequest上下文

你真的不应该在Web API中使用System.Web.HttpContext.Current。它仅在使用Web主机时有效,并且实际上仅存在于遗留原因。上下文信息隐藏在HttpRequestMessage.Properties集合中。

Web API提高可测试性的方法之一是消除对静态属性的依赖。

有很多方法可以处理实例解析和传递参数。参见这个问题,如何将参数传递给注入工厂?

HttpContext。当前在自托管项目中不可用

参见:HttpSelfHostServer和HttpContext。当前