在这里插入图片描述

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

一、DbContext

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

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

1.1、创建自定义类

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

public class MyDbContext : DbContext
{
    public MyDbContext(DbContextOptions<MyDbContext> options) : base(options)
    {
    }

    public DbSet<SomeEntity> SomeEntities { get; set; }

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

1.2、注册服务

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

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<MyDbContext>(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 的步骤如下:

  1. 打开您的应用程序的 Startup.cs 文件。

  2. ConfigureServices 方法中,添加 services.AddHttpContextAccessor()

public void ConfigureServices(IServiceCollection services)
{
    services.AddHttpContextAccessor();

    // 其他服务注册
}

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

使用 IHttpContextAccessor 的步骤如下:

  1. 在要使用 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

  1. 在带有 DI 的情况下使用 IHttpContextAccessor
public void MyController(IHttpContextAccessor httpContextAccessor)
{
    HttpContext context = httpContextAccessor.HttpContext;

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

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

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

三、两者区别

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

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 请求上下文的访问。

相关文章

C# this关键字的作用

关键字在C#中主要用于引用当前对象,区分字段与局部变量,调用其他构造函数以及传递当前对象给其他方法或构造函数。

C# 如何实现一个事件总线

EventBus(事件总线)是一种用于在应用程序内部或跨应用程序组件之间进行事件通信的机制。它允许不同的组件通过发布和订阅事件来进行解耦和通信。在给定的代码片段中,我们可以看到一个使用C#实现的Event Bus。它定义了一些接口和类来实现事件的发布和订阅。IEvent和。IEvent是一个空接口,用于约束事件的类型。是一个泛型接口,用于约束事件处理程序的类型。它定义了处理事件的异步方法HandleAsync和处理异常的方法HandleException。

C# winfrom中excel文件导入导出

在C#交流群里,看到很多小伙伴在excel数据导入导出到C#界面上存在疑惑,所以今天专门做了这个主题,希望大家有所收获!环境:win10+vs2017界面:主要以演示为主,所以没有做优化,然后主界面上添加两个按钮,分别命名为ExportExcel和ImportExcel,添加两个dataGridView,分别是dataGridView1和dataGridView2然后在窗体加载程序中给dataGr...

C#中的浅度和深度复制(C#如何复制一个对象)

接着,我们修改了复制得到的对象及其引用类型字段的属性值,最后输出原始对象和复制对象的属性值。这意味着如果一个类包含引用类型成员,在执行深度复制时,不仅复制这些引用,还会递归地复制引用所指向的对象,直到所有的引用都指向全新的对象实例。当进行浅复制时,系统会创建一个新的对象实例,但这个新对象的字段将与原始对象中的值类型字段具有相同的值,而对于引用类型字段,则仅仅是复制了。也就是说,如果一个类中有引用类型的成员变量(比如数组、其他自定义类的对象等),那么浅复制后,新对象和原对象的这些引用类型成员仍然指向。

C# 实现微信自定义分享

在实际的应用中,我们可能不是简单的将该网页的链接直接分享出去,而是生成符合实际需要的URL,微信称其为自定义分享。

C# 常用排序算法(冒泡排序 插入排序 选择排序 快速排序 归并排序 堆排序)

建堆阶段将无序列表转换为堆,排序阶段将堆的根节点依次取出,并调整堆,完成排序。它使用分治法的思想,通过选择一个基准元素,将列表分成两个子列表,并对每个子列表递归地进行排序。它重复地遍历要排序的列表,比较相邻的两个元素,并交换它们的位置,直到列表排序完成为止。每次遍历都会将最大的元素移动到列表的末尾。每次选择未排序部分的最小元素,并将其放到已排序部分的末尾,逐步构建有序序列。它将列表分成较小的子列表,对每个子列表进行排序,然后再将子列表合并成较大的有序列表,直到整个列表排序完成。

.Net Core Policy 基于策略授权

在ASP.NET Core中,重新设计了一种更加灵活的授权方式:基于策略的授权, 它是授权的核心.在使用基于策略的授权时,首先要定义授权策略,而授权策略本质上就是对Claims的一系列断言。基于角色的授权和基于Scheme的授权,只是一种语法上的便捷,最终都会生成授权策略。除了OperationAuthorizationRequirement外,都有对应的快捷添加方法,比如RequireClaim,RequireRole,RequireUserName等。新建类 PermissionHandler。

【.NET Core】深入理解任务并行库 (TPL)

是和空间中的一组公共类型和API。TPL的目的是通过简化将并行和并发添加到应用程序的过程来提高开发人员的工作效率。TPL动态缩放并发的程度以最有效地使用所有可用的处理器。此外,TPL还处理工作分区,ThreadPool上的线程调度、取消支持、状态管理以及其他低级别的细节操作。通过使用TPL,你可以在将精力集中于程序要完成的工作,同时最大程度地提高代码的性能。在.NET Framework4中,首选TPL编写多线程代码和并行代码。但是,并不是所有代码都适合并行化。

FluentValidation在C# WPF中的应用

1. 引言在.NET开发领域,FluentValidation以其优雅、易扩展的特性成为开发者进行属性验证的首选工具。它不仅适用于Web开发,如MVC、Web API和ASP.NET CORE,同样也能完美集成在WPF应用程序中,提供强大的数据验证功能。本文将深入探讨如何在C# WPF项目中运用FluentValidation进行属性验证,并展示如何通过MVVM模式实现这一功能。2. 功能概览我们的目标是构建一个WPF应用程序,它能够通过FluentValidation实现以下验证功能:验证Vie

【.NET Core】Lazy<T> 实现延迟加载详解

延迟初始化是一种将对象的创建延迟到第一次需要用时的技术。简而言之,就是对象的初始化发生在第一次需要调用的时候执行。通常所说的延迟初始化和延迟实例化的意思是相同。通过使用延迟基础,可以避免应用程序不必要的计算和内存消耗。从.NET 4.0开始,可以使用Lazy来实现对象的延迟初始化,从而优化系统的性能。延迟初始化就是将对象的初始化延迟到第一次使用该对象时。延迟初始化是我们优化程序性能的一种方式。如创建一个对象时需要花费很大的开销,而这一对象在系统运行过程中不一定会用到。

各版本 操作系统 对 .NET Framework 与 .NET Core 支持

有两种类型的受支持版本:长期支持 (LTS) 版本和标准期限支持 (STS) 版本。所有版本的质量都是一样的。唯一的区别是支持的时间长短。LTS 版本可获得为期三年的免费支持和补丁。STS 版本可获得 18 个月的免费支持和修补程序。有关详细信息,请参阅。从上图中我们可以看出,.Net5及以下版本已经不再受到官方支持;而.Net7看起来也是过渡版本,支持时间较短,本文从 .Net Core 3.1 开始介绍支持的系统,可能不是很全面,仅供参考。

【C#】.net core 6.0 依赖注入生命周期

对于.net core而言,依赖注入生命周期有三种瞬态(Transient)、作用域(Scoped)和单例(Singleton),无论使用哪种生命周期,都需要确保对象的线程安全性,并正确地处理依赖关系。

C#动态生成带参数的小程序二维码

在微信小程序管理后台,我们可以生成下载标准的小程序二维码,提供主程序入口功能。在实际应用开发中,小程序二维码是可以携带参数的,可以动态进行生成
返回
顶部