ASP.NET Core – 读写 Request / Response
需求
常见的需求就是从 request 里面读取一些 information. 比如
request URL, header, cookie,
写入 response header, cookie
实战
Razor Page Model 中
// 读取 request, header, cookie
var fullUrl = HttpContext.Request.GetDisplayUrl(); // https://192.168.1.152:44300/?value=v1&value=v2 (note: about 的话是 .../about?value=v1, 不是 .../about/?value=v1 哦)
var scheme = HttpContext.Request.Scheme; // https
var host = HttpContext.Request.Host.Host; // 192.168.1.152
var port = HttpContext.Request.Host.Port; // 44300
var path = HttpContext.Request.Path; // "/" <-- home page 的 path 是 /
var queryString = HttpContext.Request.QueryString.Value; // ?value=v1&value=v2
var query = HttpContext.Request.Query;
if (query.TryGetValue("value", out StringValues value))
{
// same key won't combine
var value1 = value.ElementAt(0); // v1
var value2 = value.ElementAt(1); // v2
var combineValue = value.ToString(); // v1,v2
}
var remoteIp = HttpContext.Connection.RemoteIpAddress; if (HttpContext.Request.Cookies.TryGetValue("cookie1", out var cookieValue))
{ }
var userAgent = HttpContext.Request.Headers.UserAgent.ToString();
var contentType = HttpContext.Request.Headers.ContentType.ToString();
if (HttpContext.Request.Headers.TryGetValue("Custom-Header", out StringValues customHeaderValue)) // h1,h2
{
var h1 = customHeaderValue.ElementAt(0); // h1,h2
var h2 = customHeaderValue.ElementAtOrDefault(1); // null
var combineHeader = customHeaderValue.ToString(); // h1,h2
// same key will combine become value1 value2
}; // 写入 header, cookie
HttpContext.Response.Headers.Append("CustomResponseHeader", "value1");
HttpContext.Response.Cookies.Append("cookie1", "value1");
可以看到关键就是 HttpContext, request, response 都可以通过这个去读写.
header 和 query 如果遇到有 2 个 key (虽然我不知道什么情况下会需要这样), header 是会 combine value 而 query 是不会的哦
queryString 获取的值就是 original 的值, 是含 encode 的, 调用 TryGetValue 的时候我们则不需要顾虑 encode, decode, 它会替我们处理好.
更多关于 query 的操控可以看这篇
razor .cshtml
我们依然可以调用到 HttpContext
@HttpContext.Request.Headers.UserAgent
Web API Controller
var userAgent = HttpContext.Request.Headers.UserAgent;
DI Service
要在 service 中获取到 Httpcontext 就需要依赖注入.
首先在 startup.cs
services.AddHttpContextAccessor();
源码

然后在 Service.cs, 通过 HttpContextAccessor 就可以获取到 HttpContext 了
public class CustomerService
{
private readonly HttpContext _httpContext;
public CustomerService(
IHttpContextAccessor httpContextAccessor
)
{
_httpContext = httpContextAccessor.HttpContext!;
} public string GetUserAgent()
{
return _httpContext.Request.Headers.UserAgent;
}
}
MVC View 中
Razor Pages 是 HttpContext 而 MVC VIew 是 Context 而已.
ASP.NET Core – 读写 Request / Response的更多相关文章
- 深入探究ASP.NET Core读取Request.Body的正确方式
前言 相信大家在使用ASP.NET Core进行开发的时候,肯定会涉及到读取Request.Body的场景,毕竟我们大部分的POST请求都是将数据存放到Http的Body当中.因为笔者日常开发所使用的 ...
- 配置 ASP.NET Core 请求(Request)处理管道
配置 ASP.NET Core 请求(Request)处理管道 在本节中,我们将讨论使用中间件组件为 asp.net core 应用程序配置请求处理管道. 作为应用程序启动的一部分,我们要在Confi ...
- asp.net core 系列之Response caching(1)
这篇文章简单的讲解了response caching: 讲解了cache-control,及对其中的头和值的作用,及设置来控制response caching; 简单的罗列了其他的缓存技术:In-me ...
- ASP.NET Core中如果Response.HasStarted已经为true,就不能更改Response.Cookies和Response.Headers等属性的值了
最近我在ASP.NET Core中做了一个中间件CustomizedMiddleware,要说该中间件的功能也很简单,其实就是往HttpResponse中添加一个Cookie而已,但是我将添加Cook ...
- asp.net core 系列之Response caching 之 Distributed caching(3)
这篇文章讲解分布式缓存,即 Distributed caching in ASP.NET Core Distributed caching in ASP.NET Core 分布式缓存是可以在多个应用服 ...
- 如何在ASP.NET Core自定义中间件中读取Request.Body和Response.Body的内容?
原文:如何在ASP.NET Core自定义中间件中读取Request.Body和Response.Body的内容? 文章名称: 如何在ASP.NET Core自定义中间件读取Request.Body和 ...
- ASP.NET Core文件上传IFormFile于Request.Body的羁绊
前言 在上篇文章深入探究ASP.NET Core读取Request.Body的正确方式中我们探讨了很多人在日常开发中经常遇到的也是最基础的问题,那就是关于Request.Body的读取方式问题,看是简 ...
- 由ASP.NET Core读取Response.Body引发的思考
前言 前几天有群友在群里问如何在我之前的文章<ASP.NET Core WebApi返回结果统一包装实践>的时候有点疑问,主要的疑问点就是关于Respouse的读取的问题.在之前的文章&l ...
- ASP.NET Core 运行原理解剖[4]:进入HttpContext的世界
HttpContext是ASP.NET中的核心对象,每一个请求都会创建一个对应的HttpContext对象,我们的应用程序便是通过HttpContext对象来获取请求信息,最终生成响应,写回到Http ...
- Nginx+Docker部署模式下 asp.net core 获取真实的客户端ip
目录 Nginx+Docker部署模式下 asp.net core 获取真实的客户端ip 场景 过程还原 结论 参考资料 Nginx+Docker部署模式下 asp.net core 获取真实的客户端 ...
随机推荐
- OnlyOffice 部署与使用
Onlyoffice为office类文档预览支持服务,该服务需在Linux系统上运行,需要用Docker容器技术. 以下步骤皆在Linux系统中操作. 一.OnlyOffice部署 1.安装Docke ...
- oeasy教您玩转vim - 54 - # 匹配替换
查找细节 回忆上节课内容 我们学习了 替换 substitude 替换单行 :s/shiyanlou/oeasy 加上range :3,5s/shiyanlou/oeasy :%s/shiyanl ...
- 题解:AT_xmascon21_b Bad Mood
AT_xmascon21_b Bad Mood 题意 给定你一个 \(n\times m\) 的矩形. 以一条对角线为基础上,制作一个无向图,该图的顶点对应于格子的共有 \((m+1) \times ...
- C# 网络编程:.NET 开发者的核心技能
前言 数字化时代,网络编程已成为软件开发中不可或缺的一环,尤其对于 .NET 开发者而言,掌握 C# 中的网络编程技巧是迈向更高层次的必经之路.无论是构建高性能的 Web 应用,还是实现复杂的分布式系 ...
- css 蛇形排序
先看效果 需求: 一个[ 4 * ?]的网格布局,奇数行 布局 从左往右,偶数行 布局 从右往左. 思路1: js将数组按4个每份进行分割,将偶数份进行反向,然后再将分割后的数据,重新组装.( 太麻 ...
- JWT浅了解
JWT通过数字签名的方式(让我想起了软考),以json对象为载体,在不同的服务终端之间安全传输信息 是一种授权认证 生成token的原理:通过header的加密方式,对payload进行加密.然后把h ...
- 【SQL】 Excel 批量编写SQL脚本
参考地址: https://zhuanlan.zhihu.com/p/134290191 有两种办法: 第一种,使用 & 拼接符号处理 ="INSERT INTO `my-info` ...
- 如何将AI模型与CAE(计算机辅助工程)结合 —— AI大模型能否用于CAE有限元分析和数值模拟仿真的工业软件领域?
引自: https://www.zhihu.com/question/611863569/answer/3271029434?utm_id=0 有限元分析中的三个要素,几何模型,本构模型和边界条件. ...
- 读《Simple statistical gradient-following algorithms for connectionist reinforcement learning》论文 提出Reinforce算法的论文
<Simple statistical gradient-following algorithms for connectionist reinforcement learning>发表于 ...
- 国产CPU,国产操作系统UOS——零刻LZX迷你主机 , 显卡驱动安装以及屏幕配置
看网上新闻发现了一款mini电脑--零刻LZX迷你主机 国产兆芯四核八线程 教学家用办公全能王8+256G 该款电脑使用的是国产CPU兆芯,以及国产操作系统UOS,由于价格还不贵就入手玩玩. 商品地址 ...