给自己一个目标,然后坚持一段时间,总会有收获和感悟! 请求上下文是指在 Web 应用程序中处理请求时,包含有关当前请求的各种信息的对象。这些信息包括请求的头部、身体、查询字符串、路由数据、用户身份验证信息以及其他与请求相关的数据。

目录

一、DbContext1.1、创建自定义类1.2、注册服务1.3、引用

二、HttpContextAccessor2.1、Web 应用程序2.2、控制台应用程序2.3、依赖注入和使用

三、两者区别

一、DbContext

DbContext 是 Entity Framework (EF) 中的一个关键组件,用于在应用程序和数据库之间进行交互。它是一个上下文类,继承自 DbContext,用于定义数据库模型和执行数据库操作。通过 DbContext,您可以执行查询、插入、更新和删除等数据库操作。DbContext 主要关注数据持久化和数据访问。

在 .NET Core 6.0 中,您可以通过依赖注入 (DI) 来注册和使用上下文服务。 以下是一些常见的步骤:

1.1、创建自定义类

首先,在您的应用程序中创建一个上下文类。这个类通常是从 DbContext 类继承而来,用于定义您的数据库模型和执行数据库操作。

public class MyDbContext : DbContext

{

public MyDbContext(DbContextOptions options) : base(options)

{

}

public DbSet SomeEntities { get; set; }

// 其他模型和数据库操作

}

1.2、注册服务

接下来,在您的应用程序的 Startup.cs 文件中,注册您的上下文服务。在 ConfigureServices 方法中使用 AddDbContext 方法来添加上下文服务并指定连接字符串和其他选项。

public void ConfigureServices(IServiceCollection services)

{

services.AddDbContext(options =>

options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

// 其他服务注册

}

请确保在 appsettings.json 文件中配置了数据库连接字符串,并将其与注册的名称(DefaultConnection)对应。

1.3、引用

现在,您可以在您的应用程序的其他组件(如控制器或服务)中使用上下文服务。只需将 MyDbContext 类注入为依赖项即可。

public class MyService

{

private readonly MyDbContext _dbContext;

public MyService(MyDbContext dbContext)

{

_dbContext = dbContext;

}

public void DoSomething()

{

// 使用上下文执行数据库操作

}

}

在上面的示例中,MyService 类依赖于 MyDbContext,通过构造函数注入该依赖项。

这样,在整个应用程序中,您都可以使用上下文服务来执行数据库操作,通过依赖注入的方式访问您的上下文对象。

请注意,上述代码片段为常见的用例提供了示例,但实际的实现可能会因您的应用程序需求而不同。

二、HttpContextAccessor

在 .NET Core 6.0 中,获取上下文的方式取决于您使用的技术栈和具体的应用程序类型。 以下是几种常见的方法:

2.1、Web 应用程序

ASP.NET Core Web 应用程序:如果您正在开发一个 ASP.NET Core Web 应用程序,您可以通过依赖注入来获取当前的 HTTP 上下文。您可以使用 HttpContextAccessor 类来访问当前的 HTTP 上下文对象。在您的控制器、中间件或服务中注入 IHttpContextAccessor,然后使用它来访问当前的上下文。

public class MyController : Controller

{

private readonly IHttpContextAccessor _httpContextAccessor;

public MyController(IHttpContextAccessor httpContextAccessor)

{

_httpContextAccessor = httpContextAccessor;

}

public IActionResult MyAction()

{

HttpContext context = _httpContextAccessor.HttpContext;

// 使用上下文对象进行操作

return View();

}

}

2.2、控制台应用程序

如果您正在开发一个控制台应用程序,您可以使用 CallContext 类来存储和检索上下文信息。CallContext 类提供了一个字典,您可以将相关上下文信息存储在其中。

public static class MyContext

{

private static readonly string Key = "MyContextKey";

public static string Current

{

get => (string)CallContext.LogicalGetData(Key);

set => CallContext.LogicalSetData(Key, value);

}

}

在您的应用程序中,可以设置和获取上下文信息:

MyContext.Current = "MyContextValue";

string currentContext = MyContext.Current;

这样,在应用程序的不同位置,您都可以获取和设置相同的上下文信息。

请注意,上述方法为常见的用例提供了示例,但具体的实现可能会根据您的应用程序的需求而有所不同。

2.3、依赖注入和使用

在 .NET Core 6.0 中,您可以使用依赖注入 (DI) 来注册和使用 IHttpContextAccessor。

注册 IHttpContextAccessor 的步骤如下:

打开您的应用程序的 Startup.cs 文件。 在 ConfigureServices 方法中,添加 services.AddHttpContextAccessor()。

public void ConfigureServices(IServiceCollection services)

{

services.AddHttpContextAccessor();

// 其他服务注册

}

现在,IHttpContextAccessor 已经被注册到应用程序的 DI 容器中,可以在其他组件中使用。

使用 IHttpContextAccessor 的步骤如下:

在要使用 IHttpContextAccessor 的类中,将其注入为依赖项。

public class MyService

{

private readonly IHttpContextAccessor _httpContextAccessor;

public MyService(IHttpContextAccessor httpContextAccessor)

{

_httpContextAccessor = httpContextAccessor;

}

public void DoSomething()

{

HttpContext context = _httpContextAccessor.HttpContext;

// 使用 HttpContext 进行操作,例如获取请求信息或用户身份验证状态等

}

}

在上面的示例中,我们通过构造函数将 IHttpContextAccessor 注入到 MyService 类中,并将其赋值给私有字段 _httpContextAccessor。

在带有 DI 的情况下使用 IHttpContextAccessor。

public void MyController(IHttpContextAccessor httpContextAccessor)

{

HttpContext context = httpContextAccessor.HttpContext;

// 使用 HttpContext 进行操作,例如获取请求信息或用户身份验证状态等

}

在控制器或其他类中,您可以通过方法参数直接使用 IHttpContextAccessor。

通过使用 IHttpContextAccessor,您可以在应用程序的各个部分获取当前 HTTP 请求的上下文信息,例如请求头、查询参数、用户身份验证和授权信息等。请注意,您可能需要在 ASP.NET Core 应用程序中启用相关中间件和功能,以便在 IHttpContextAccessor 中获取到完整的上下文信息。

三、两者区别

DbContext 和 IHttpContextAccessor 是在不同上下文中使用的两个不同的服务。

1)DbContext 是 Entity Framework (EF) 中的一个关键组件,用于在应用程序和数据库之间进行交互。它是一个上下文类,继承自 DbContext,用于定义数据库模型和执行数据库操作。通过 DbContext,您可以执行查询、插入、更新和删除等数据库操作。DbContext 主要关注数据持久化和数据访问。

2)IHttpContextAccessor 是 ASP.NET Core 中的一个服务,用于访问当前 HTTP 请求的上下文信息。它提供了访问请求头、查询参数、用户身份验证和授权信息等的能力。通过 IHttpContextAccessor,您可以在整个应用程序中访问当前 HTTP 请求的上下文信息。 IHttpContextAccessor 主要与 Web 请求处理相关联。

总结起来,DbContext 是与数据库交互的组件,而 IHttpContextAccessor 是与处理 Web 请求相关的组件。它们的用途和职责不同,但它们在 ASP.NET Core 应用程序中可以一起使用,以实现与数据库的交互和对 Web 请求上下文的访问。

参考链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。