对比 ASP.NET Core 中的 HttpContext.Features 与 HttpContext.Items
对比 ASP.NET Core 中的 HttpContext.Features 与 HttpContext.Items
https://newbedev.com/httpcontext-features-vs-httpcontext-items-in-asp-net-core
最大的区别是 HttpContext.Items 是设计用来存储 键-值 对的,而 HttpContext.Features 是设计用来存储 类型-实例 对的。
说的更清楚一点,HttpContext.Items 用来存储在当前请求上下文中共享的数据,而 HttpContext.Features 中是一个 IFeatureCollection 的实例,与 Items 完全不同。
该 IFeatureCollection 实例表示一组 HTTP 特性的集合,例如:
- IAuthenticationFeature 存储原始的 PathBase 和 原始的 Path.
- ISessionFeature 存储当前的 Session.
- IHttpConnectionFeature 存储了当前的底层连接
- 其它
为了便于存储和提取 类型-实例 对,IFeatureCollection 接口定义了如下 3 个重要方法:
public interface IFeatureCollection : IEnumerable<KeyValuePair<Type, object>>{
// ...
object this[Type key] { get; set; }
TFeature Get<TFeature>();
void Set<TFeature>(TFeature instance);
}
在 IFeatureCollection 的实现 FeatureCollection 中,将获取的值简单地转型为要求的类型:
public class FeatureCollection : IFeatureCollection
{
// ... get the required type of feature
public TFeature Get<TFeature>()
{
return (TFeature)this[typeof(TFeature)]; // note: cast here!
}
public void Set<TFeature>(TFeature instance)
{
this[typeof(TFeature)] = instance; // note!
}
}
就是这样设计的。因为在当前请求中不需要存储 2 个 IHttpConnectionFeature 实例,或者 2 个 ISession 。
尽管从技术上来说,你可以使用 FeatureColliection 来存储其它的 类型-值 对,最好不要这样做。如你所见,Set<TFeature>(TFeature instance) 方法在类型已经存储集合中的时候,会简单地替换掉原来的实例,这就意味着如果你希望存储同一类型的两个实例,是做不到的。
HttpContext.Items 是设计用来存储在单个请求中短期存在的数据。
HttpContext.Features 是设计用来共享不同的 HTTP 特性的,这使得中间件可以创建或者修改应用程序的主机处理管线。通过 .NET 本身已经创建了一系列的特性,例如 IHttpSendFileFeature。
应该只使用 HttpContext.Items 来存储数据,使用 HttpContext.Features 来添加新的其它中间件可能会使用的 HTTP 特性。
参考:
对比 ASP.NET Core 中的 HttpContext.Features 与 HttpContext.Items的更多相关文章
- 在ASP.NET Core中怎么使用HttpContext.Current (转载)
一.前言 我们都知道,ASP.NET Core作为最新的框架,在MVC5和ASP.NET WebForm的基础上做了大量的重构.如果我们想使用以前版本中的HttpContext.Current的话,目 ...
- ASP.NET Core 中 HttpContext 详解与使用 | Microsoft.AspNetCore.Http 详解 (转载)
“传导体” HttpContext 要理解 HttpContext 是干嘛的,首先,看图 图一 内网访问程序 图二 反向代理访问程序 ASP.NET Core 程序中,Kestrel 是一个基于 li ...
- ASP.NET Core 中 HttpContext 详解与使用 | Microsoft.AspNetCore.Http 详解
笔者没有学 ASP.NET,直接学 ASP.NET Core ,学完 ASP.NET Core MVC 基础后,开始学习 ASP.NET Core 的运行原理.发现应用程序有一个非常主要的 “传导体” ...
- 在ASP.NET Core中怎么使用HttpContext.Current
一.前言 我们都知道,ASP.NET Core作为最新的框架,在MVC5和ASP.NET WebForm的基础上做了大量的重构.如果我们想使用以前版本中的HttpContext.Current的话,目 ...
- 在ASP.NET Core中实现一个Token base的身份认证
注:本文提到的代码示例下载地址> How to achieve a bearer token authentication and authorization in ASP.NET Core 在 ...
- ASP.NET Core 运行原理解剖[4]:进入HttpContext的世界
HttpContext是ASP.NET中的核心对象,每一个请求都会创建一个对应的HttpContext对象,我们的应用程序便是通过HttpContext对象来获取请求信息,最终生成响应,写回到Http ...
- ASP.NET Core中如何调整HTTP请求大小的几种方式
一.前言 一般的情况下,我们都无需调用HTTP请求的大小,只有在上传一些大文件,或者使用HTTP协议写入较大的值时(如调用WebService)才可能会调用HTTP最大请求值. 在ASP.NET Co ...
- 谈谈ASP.NET Core中的ResponseCaching
前言 前面的博客谈的大多数都是针对数据的缓存,今天我们来换换口味.来谈谈在ASP.NET Core中的ResponseCaching,与ResponseCaching关联密切的也就是常说的HTTP缓存 ...
- 探索ASP.NET Core中的IStartupFilter
原文:Exploring IStartupFilter in ASP.NET Core 作者:Andrew Lock 译者:Lamond Lu 在本篇博客中,我将介绍一下IStartupFilter, ...
- 在Asp.Net Core中使用中间件保护非公开文件
在企业开发中,我们经常会遇到由用户上传文件的场景,比如某OA系统中,由用户填写某表单并上传身份证,由身份管理员审查,超级管理员可以查看. 就这样一个场景,用户上传的文件只能有三种人看得见(能够访问) ...
随机推荐
- Redis 发布订阅模式
概述 Redis 的发布/订阅是一种消息通信模式:发送者(Pub)向频道(Channel)发送消息,订阅者(Sub)接收频道上的消息.Redis 客户端可以订阅任意数量的频道,发送者也可以向任意频道发 ...
- perf时 出现[kernel.kallsyms] 符号怎么办
在 perf 工具生成的火焰图中看到 [kernel.kallsyms],通常意味着火焰图中包含内核符号,但这些符号没有被正确解析.这可能是由于以下几个原因导致的: 内核符号表不可用或不完整:perf ...
- Android内存分析命令
一.内存指标 Item 全称 含义 等价 USS Unique Set Size 物理内存 进程独占的内存 PSS Proportional Set Size 物理内存 PSS= USS+ 按比例包含 ...
- YashanDB发布会圆满收官,V23.1三大新品引领国产数据库技术与应用突破!
11月8日,YashanDB 2023年度产品发布会在线上成功召开.本次产品发布会以"惟实·励新"为主题,宣布崖山数据库系统YashanDB 内核能力.产品形态.生态创新全面升级, ...
- 15 Transformer 框架概述
博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...
- Python之py9-录音自动下载
#!/usr/bin/env python # -*- coding:utf-8 -*- import os import re import pandas as pd import numpy as ...
- ES6语法特性
ES6语法特性 简介 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了. 它的目标,是使得 JavaScript 语言 ...
- 鲜花:bitset求解高维偏序
书接上回 一维偏序直接做.二维偏序套线段树或归并排序.三维偏序可以树套树或者 CDQ 套树,那四维偏序呢?可以 CDQ 套树套树.那五维偏序呢?可以发现,无论是 CDQ 分治还是树,都很难再继续嵌套, ...
- AlignSum:数据金字塔与层级微调,提升文本摘要模型性能 | EMNLP'24
来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: AlignSum: Data Pyramid Hierarchical Fine-tuning for Aligning with Human ...
- Windows高级调试
文档摘要: 本书<Windows高级调试>主要讲解Windows高级调试技术和工具,包括调试器简介.调试器揭密.符号文件与源文件的管理.栈内存破坏.堆内存破坏.安全.进程间通信.资源泄漏. ...