HttpSelfHostServer and HttpContext.Current

19
我正在开发一个自托管的ASP.NET Web API应用程序。一切都运行正常,但是现在我遇到了HttpContext问题:
我需要保存客户端的会话信息。但是HttpContext.Current总是null。所以很明显我的HttpSelfHostServer不能与静态HttpContext类一起工作。
我不理解的是为什么会这样?而且我无法找到一个方法告诉HtttpSelfHostServer或HttpSelfHostConfiguration使用HttpContext。
以下是我的操作步骤:
1.创建HttpSelfHostConfiguration
- 添加服务解析器和路由 - 添加自定义UserNamePassword验证器
2.使用配置创建HttpSelfHostServer实例
- 调用server.OpenAsync().Wait()
非常感谢任何帮助告诉我如何让我的服务器使用HttpContext.Current!

也许需要 AspNetCompatibility:https://dev59.com/9G025IYBdhLWcg3wnXSf - mellamokb
嗨,mellamokb。谢谢你,但是如果我使用aspNetCompatibelity模式,我仍然需要IIS,而这正是我想避免的事情。 - Richard
请注意我发布的链接中的第二个答案提到了很多与OperationContext中可用信息相同的内容。您确切需要从HttpContext中获取什么? - mellamokb
OperationContext只存在于WCF世界中,而不是ASP.Net WebApi中。 - Julien Jacobs
2个回答

30

在自托管环境下,您将无法使用HttpContext。HttpContext是由ASP.Net管道设置的,如果您不在IIS/ASP.Net下运行,则不会拥有它。

HttpContext仅在Web Hosting模式下可用,在此模式下,HttpControllerHandler创建请求。

FYI- 我邀请您阅读Pedro Felix撰写的以下优秀文章,以更好地了解不同的托管模型:


13
为解决这个问题(我发现现在使用的许多组件需要在Web API和MVC中同样有效),您可以尝试使用我编写的旧版shim来提供类似HttpContext的接口,在两种情况下都能正常工作。它已经在NuGet上了,这里是源代码: Github 链接 (或者Nuget 链接)。

1
谢谢你抽出时间在这里和Github上发布这个内容;我有一个旧的组件,它希望在当前线程的静态变量中漂浮,而这个适配器甚至能够使其在SelfHost环境下正常运行。简直完美无比! - Nicholas Piasecki
你提供的东西看起来非常酷。然而,我无法确定它是否支持HttpSession对象的替换 - HttpContext.Current.Session似乎不可用。你的库是否支持会话状态?如果不支持,你能推荐任何获取会话状态替代方案的方法吗?我可以使用HttpContext.Current.Items吗? - Ivaylo Slavov
这似乎删除了我的System.Web.Http 5.2.3.0引用,并将其替换为4.0.0.0,从而导致了大量的构建错误。 - Daniël Tulp
@DaniëlTulp 已经来不及有价值了,但对于下一个人,我只需从 https://github.com/danielcrenna/vault 拉取代码即可。 - Daniel Crenna
@DanielCrenna 具体是哪个项目,Daniel? - Daniël Tulp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接