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

时间:2013-01-16 00:35:04

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-web-api

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

使用NRE调用以下失败,因为Current为空(aka。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>()失败。

2 个答案:

答案 0 :(得分:11)

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

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

有很多方法可以处理实例的解析和传递参数。请参阅此问题Unity Application Block, How pass a parameter to Injection Factory?

答案 1 :(得分:6)

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

请参阅:HttpSelfHostServer and HttpContext.Current