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 获取真实的客户端 ...
随机推荐
- AS上的基础中级控件-图形定制
图形Drawable 1.Drawable表达包含了图片色块画布背景等 2.存在res中的Drawable目录下,保存描述性的XML文件 3.各种视图都可以使用该控件如ViewText,Button, ...
- idea快捷键Ctrl+alt+m:如何快速抽离部分方法
Ctrl+alt+m 效果如下图
- SpringBoot全局异常处理及自定义异常
首先定义自定义返回类,如果自己项目中已经有了自定义返回类只需要将后面的代码做相应的修改即可: import io.swagger.annotations.ApiModelProperty; impor ...
- 【Java】爬资源案例
也不知道为什么喜欢叫爬虫 搞明白原理之后原来就是解析网页代码获取关键字符串 现在的网页有很多解析出来就是JS了,根本不暴露资源地址 依赖一个JSOUP,其他靠百度CV实现 <!-- https: ...
- 【Vue】09 Webpack Part5 Vue组件化开发
[Vue组件文件打包:Vue-Loader] 复制之前上一个项目 然后在我们的src目录中创建App.vue文件 这个文件就是Vue的模块文件 [建议下载IDEA的Vue.js插件] Vue的模块分为 ...
- 由于美国的制程限制,假如我国的同等性能的AI芯片5年内无法实现量产化我们应该如何发展我们的AI领域的基础设施呢?
相关: 美晶片禁令面難題!封過頭反把市場送中國? 今年华为公司推出了mate pro60手机,可以说我们可以实现7nm芯片的制造了,但是要注意,我们在实现7nm芯片制造的时候使用的应该依旧是被美国限制 ...
- 国产软件如何让人再次失望——!20824 mindspore1.3.0gpu version can not compile from source code, because openmpi source code has bug
如题,该PR地址: https://gitee.com/mindspore/mindspore/pulls/20824#note_7053720 What type of PR is this? Un ...
- 在WSL Ubuntu中设置sshd自启动
参考: https://blog.csdn.net/android_cai_niao/article/details/128490566 ------------------------------- ...
- 在vscode中通过修改launch.json文件为项目添加启动参数——在launch.json文件中修改args变量
以前一直在使用pycharm,不管怎么说毕竟国内外的Python编程者大部分都更支持pycharm,并且认为pycharm是Python语言编程中最好用的编辑器,但是随着国内编程人员一茬一茬的兴起很多 ...
- selenium复习之---原理+基础用法
简介 1.是什么 selenium是用来进行页面元素定位的第三方库,用来进行web自动化测试的工具,可以直接运行在浏览器中. 2.原理: selenium在工作过程中有三个角色,selenium客户端 ...