如何从自托管的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>()
失败。
答案 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在自托管项目中不可用