asp.net 如何在mediatr命令中访问HttpContext而不安装弃用的nuget包[重复]

jm2pwxwz  于 12个月前  发布在  .NET
关注(0)|答案(1)|浏览(125)

此问题在此处已有答案

What Nuget packages must be referenced by an ASP.NET Core 6 application parts project(1个答案)
21天前关闭
我有一个.NET 6 API,我想在mediatr命令中获取HttpContext,我在文档中读到可以用builder.Services.AddHttpContextAccessor();注册HttpContextAccessor,我没有问题,但是当我想在命令的构造函数中注入IHttpContextAccessor时,我的IDE告诉它不能解析符号。我也看了多个其他来源,它们大多指向要安装的microsoft.aspnetcore.httpmicrosoft.aspnetcore.app。可悲的是,这些nuget软件包已被弃用,所以我正在寻找一个不使用这些软件包的解决方案。
PS:API和mediatr命令不在同一个项目中
我已经在多个其他网站上寻找答案,但他们要么没有指定他们正在使用的软件包,要么他们使用一个过时的软件包。

nr9pn0ug

nr9pn0ug1#

若要在非web.sdk项目中使用ASP.NET Core 3+类型,请使用共享框架引用。
示例项目:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>net6.0</TargetFrameworks>
    <Nullable>enable</Nullable>
    <OutputType>Library</OutputType>
  </PropertyGroup>

  <ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
  </ItemGroup>

</Project>

字符串
然而,请注意,这主要是为了提供具有端点等的库。在业务层中使用此引用将业务逻辑与Web API框架耦合。
更灵活的方法是在业务逻辑项目中为所需的功能提供接口,并在API项目中提供实现。
举个例子

// In business project
public interface IMySpecialContext
{
    string Value { get; }
}
// In API project
public class HttpMySpecialContext : IMySpecialContext
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public HttpMySpecialContext(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    public string Value
    {
        // Probably should throw for missing HttpContext or header.
        get => _httpContextAccessor.HttpContext?.Request.Headers["X-My-Special-Header"]!;
    }
}
// In unit tests
public class DummyMySpecialContext : IMySpecialContext
{
    public string Value => "Dummy Special Context Value";
}

相关问题