5

如何从自托管的 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.
                    ));

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

4

2 回答 2

11

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

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

有一些方法可以处理实例解析和传递参数。看到这个问题Unity Application Block, How pass a parameter to Injection Factory?

于 2013-01-16T01:38:52.713 回答
6

HttpContext.Current 在自托管项目中不可用

请参阅:HttpSelfHostServer 和 HttpContext.Current

于 2013-01-16T01:28:37.487 回答