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。
我不明白的是:为什么..?
而且我想不出办法告诉HtttpSelfHostServer
和HttpSelfHostConfiguration
与HttpContext
一起工作。
这就是我正在做的事情:
创建HttpSelfHostConfiguration
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的主要内容,如果未能解决你的问题,请参考以下文章