.net标准库中的HttpContext

Vis*_*l A 18 .net c# asp.net-core .net-standard

我正在研究几个项目,其中ASP.NET 4.5一个是应用程序,另一个是.Net Core API 1.1项目.asp.net应用程序使用HttpContext类来读取cookie和页眉.现在,我需要将其移动到.net标准库,该库可供项目使用.我在.net标准SDK中找不到HttpContext.有什么建议?

SO *_*ood 16

您的方法存在一个问题:.NET Standard是.NET可用的最简单的实现,这意味着只实现了与平台和场景无关的基本功能.
HttpContext.NET Framework和.NET Core都存在(顺便说一下,它们都实现了.NET标准),但是特定于Web,它在.NET Standard上不存在.

所以,你有三个选择:

  1. 定位.NET Framework并使用 System.Web.HttpContext
  2. 目标.NET Core并使用 Microsoft.AspNetCore.Http.HttpContext
  3. 移动HttpContext远离.NET Standard项目的逻辑

但请注意,这些课程差异很大..NET Core版本是为ASP.NET Core创建的,与ASP.NET 4.5和olders有很大不同.


Tom*_*kel 9

我不同意这些答案以及关于只HttpContext在 Web 项目中拥有的无意义。这实际上是紧密耦合的,因为您希望能够重用代码,因此 .net 核心或 .net 标准中的类库应该能够使用HttpContext

因此,在 .NET Standard 中,您要添加:

Microsoft.AspNetCore.Http.Abstractions
Run Code Online (Sandbox Code Playgroud)

可悲的是,虽然新的 HttpContext 有很多不同之处,但 HttpContext.Current缺少会话和请求等。

(是的,我了解了设计模式以及为什么要分离出来并使其更易于测试)

这里有一个小技巧,你也可以得到 Current

namespace System.Web
{
    public static class HttpContext
        {
            private static Microsoft.AspNetCore.Http.IHttpContextAccessor m_httpContextAccessor;


    public static void Configure(Microsoft.AspNetCore.Http.IHttpContextAccessor httpContextAccessor)
        {
            m_httpContextAccessor = httpContextAccessor;
        }


        public static Microsoft.AspNetCore.Http.HttpContext Current
        {
            get
            {
                return m_httpContextAccessor.HttpContext;
            }
        }

    }
}
Run Code Online (Sandbox Code Playgroud)


rob*_*pim 6

如果您的目标是 .NETStandard 2.0,您可以使用HttpContext.

虽然它不包含在.NET Standard库中,但该Microsoft.AspNetCore.Http.Abstractions包(面向 .NET Standard 2.0)将使您能够使用HttpContext.

  • 因为这不是同一个 HttpContext。(我没有贬低你) (5认同)
  • 此 HttpContext 仅具有可用的 Equals 和 ReferenceEquals 方法,没有用于访问运行时的属性。我缺少什么? (3认同)