asp.net-mvc-5 - 需要 httpcontext 和 httpcontextbase 之间的公共对象
问题描述
我正在使用基于 asp.net mvc 5 和 asp.net web api 2 owin 的 web 应用程序。第一个是网站,第二个是后端 api。
我需要共享一些库,在 asp.net mvc 应用程序中,我可以访问作为 web.api 中的 HttpBaseRequest 的 HttpContextBase.Request 可以访问作为 HttpRequest 的 httpContext.Request
计划将来升级到 asp.net 核心,在我的类库中共享一个公共对象的最佳方式是什么?
解决方案
您可以定义一个表示访问 httpcontext 的接口,但无需将其绑定到任何特定的 http 相关类型
然后,提供特定于您的库和应用程序正在处理的框架的实现。.net framework 和 .net mvc 和 dotnet-core 各自为 http contexf、request、response 定义了不同的实现。
例如
interface IMyHttpContext
class Net4HttpContext : IMyHttpContext
class NetCoreHttpContext : IMyHttpContext
然后,只暴露你需要的东西。例如GetRequestPath、WriteToResponse、GetHeader、SetCookie。等等..这将是很多持续的工作,但结果是,您的网络标准库(其中一个应该托管您的接口,顺便说一句)不会关心实施。显然,您必须将特定 http 对象的所有用法替换为您的界面。
因此,IMyHttpContext 转到一个新的网络标准程序集。这个程序集将适用于所有 dotnet 框架。
Net4HttpContext 转到 net45 程序集,它本身引用 System.Webb。您可以通过仅限 Windows 的 .net 框架应用程序来引用它。
NetCoreHttpContext 转到 dotnetcore 或 netstandard 程序集,引用 dotnet core 的 http 相关 nuget 包。将此与 dotnet 核心应用程序一起使用。
然后,在您的整个应用程序中,无论是 net45 还是 netcore,以及一些 DI 设置,您都只引用了您的界面。实现被注入。
祝你好运。
推荐阅读
- node.js - WebStorm 2018.1:我无法从 docker 容器运行远程调试打字稿时遇到断点
- google-apps-script - 使用应用程序脚本插入时单元格公式未更新
- ansible - Ansible win_audit_policy_system 模块不改变值
- python - Python Pandas 动态读取具有不同列大小的多个标题行的 Excel 表
- reactjs - React.js 运行 yarn start 会报错
- networking - 在 netfilter 挂钩中获取网络接口 IPv4 地址
- c - TCP 客户端 - 接收来自未知/无限大小的消息
- r - 高效的 R 光栅代数
- python - Python运行线程时丢失数据
- python - 从 URL 更新 Pandas 数据框,但没有列,每分钟更新一次,而不是每 60 秒更新一次