HttpSelfHostServer 和 HttpContext.Current

Posted

技术标签:

【中文标题】HttpSelfHostServer 和 HttpContext.Current【英文标题】:HttpSelfHostServer and HttpContext.Current 【发布时间】:2012-07-06 01:30:24 【问题描述】:

我正在开发一个自托管的 ASP.NET Web api 应用程序。 一切正常,但现在我正在努力解决HttpContext

我需要保存来自客户端的会话信息。 但HttpContext.Current 始终为空。 所以很明显,我的HttpSelfHostServer 不适用于静态 HttpContext-Class。

我不明白的是:为什么..? 而且我想不出办法告诉HtttpSelfHostServerHttpSelfHostConfigurationHttpContext 一起工作。

这就是我正在做的事情:

    创建HttpSelfHostConfiguration

    1.1 添加Service-Resolvers & Routes 1.2 添加自定义UserNamePassword-Validator

    使用配置创建新的 HttpSelfHostServer 实例

    2.1server.OpenAsync().Wait()

非常感谢任何帮助我告诉我的服务器使用HttpContext.Current 的方法! 干杯!

【问题讨论】:

可能需要AspNetCompatibility:***.com/questions/5904313/… 嗨 mellamokb。谢谢,但是如果我使用 aspNetCompatibelity-Mode,我仍然需要一个 IIS,这是我想要避免的。 另请注意,我发布的链接中的第二个答案是指 OperationContext 中提供的许多相同信息。 HttpContext 到底需要什么? OperationContext 只存在于 WCF 世界中,不存在于 ASP.Net WebApi 中 【参考方案1】:

您将无法在自托管环境中使用 HttpContext。 HttpContext 是由 ASP.Net 管道设置的,不运行在 IIS/ASP.Net 下就没有。

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

仅供参考 - 我邀请您阅读 Pedro Felix 的以下精彩文章,以更好地了解不同的托管模型:

HTTP processing architecture overview Web-hosting Self-hosting

【讨论】:

【参考方案2】:

为了解决这个问题(我发现我现在使用了很多需要在 Web API 和 MVC 中同样工作的组件),你可以试试我写的这个旧 shim 给你一个类似 HttpContext 的界面这两种口味都适用。它也在 NuGet 上,这是源代码: Link on github (或Link on Nuget)

【讨论】:

感谢您花时间在此处和 Github 上发布此内容;我有一个遗留组件,它希望在当前线程上的静态变量中浮动,即使在 SelfHost 下,这个 shim 也能击败它。像魅力一样工作! 你提供的东西看起来很酷。但是,我无法查看它是否支持替换 HttpSession 对象 - HttpContext.Current.Session 似乎不可用。您的图书馆是否支持会话状态?如果没有,您能推荐任何方法来获得会话状态替换吗?我可以使用HttpContext.Current.Items 吗? 这以某种方式删除了我的 system.web.http 5.2.3.0 引用并将其替换为 4.0.0.0,从中得到了大量构建错误 @DaniëlTulp 为时已晚,没有价值,但对于下一个人,我只需从 github.com/danielcrenna/vault 提取代码 @DanielCrenna 哪些项目特别是 Daniel?

以上是关于HttpSelfHostServer 和 HttpContext.Current的主要内容,如果未能解决你的问题,请参考以下文章

WebApi控制器使用类库

HTTP的长链接和短链接以及HTTP1.0HTTP1.1HTTP2.0

HTTP1.0和HTTP1.1和HTTP2.0的区别

HTTP1.0和HTTP1.1和HTTP2.0的区别

HTTP协议HTTP请求和响应

HTTPS和HTTP有啥区别?