首页 > 其他分享 >HttpContext扩展类

HttpContext扩展类

时间:2024-06-22 13:43:20浏览次数:14  
标签:return string 扩展 static context HttpContext public

需要引入UAParser,IPTools.Core类库a
1 public static partial class HttpContextExtension 2 { 3 /// <summary> 4 /// 是否是ajax请求 5 /// </summary> 6 /// <param name="request"></param> 7 /// <returns></returns> 8 public static bool IsAjaxRequest(this HttpRequest request) 9 { 10 if (request == null) 11 { 12 throw new ArgumentNullException(nameof(request)); 13 } 14 15 //return request.Headers.ContainsKey("X-Requested-With") && 16 // request.Headers["X-Requested-With"].Equals("XMLHttpRequest"); 17 18 return request.Headers["X-Requested-With"] == "XMLHttpRequest" || request.Headers != null && request.Headers["X-Requested-With"] == "XMLHttpRequest"; 19 } 20 21 /// <summary> 22 /// 获取客户端IP 23 /// </summary> 24 /// <param name="context"></param> 25 /// <returns></returns> 26 public static string GetClientUserIp(this HttpContext context) 27 { 28 if (context == null) return ""; 29 var result = context.Request.Headers["X-Forwarded-For"].FirstOrDefault(); 30 if (string.IsNullOrEmpty(result)) 31 { 32 result = context.Connection.RemoteIpAddress?.ToString(); 33 } 34 if (string.IsNullOrEmpty(result)) 35 throw new Exception("获取IP失败"); 36 37 if (result.Contains("::1")) 38 result = "127.0.0.1"; 39 40 result = result.Replace("::ffff:", ""); 41 result = result.Split(':')?.FirstOrDefault() ?? "127.0.0.1"; 42 result = IsIP(result) ? result : "127.0.0.1"; 43 return result; 44 } 45 46 /// <summary> 47 /// 判断是否IP 48 /// </summary> 49 /// <param name="ip"></param> 50 /// <returns></returns> 51 public static bool IsIP(string ip) 52 { 53 return Regex.IsMatch(ip, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$"); 54 } 55 56 /// <summary> 57 /// 获取登录用户id 58 /// </summary> 59 /// <param name="context"></param> 60 /// <returns></returns> 61 public static long GetUId(this HttpContext context) 62 { 63 var uid = context.User.FindFirstValue(ClaimTypes.PrimarySid); 64 return !string.IsNullOrEmpty(uid) ? long.Parse(uid) : 0; 65 } 66 67 /// <summary> 68 /// 获取登录用户名 69 /// </summary> 70 /// <param name="context"></param> 71 /// <returns></returns> 72 public static string GetName(this HttpContext context) 73 { 74 var uid = context.User?.Identity?.Name; 75 76 return uid; 77 } 78 79 /// <summary> 80 /// 判断是否是管理员 81 /// </summary> 82 /// <param name="context"></param> 83 /// <returns></returns> 84 public static bool IsAdmin(this HttpContext context) 85 { 86 var userName = context.GetName(); 87 return userName == GlobalConstant.AdminRole; 88 } 89 90 /// <summary> 91 /// ClaimsIdentity 92 /// </summary> 93 /// <param name="context"></param> 94 /// <returns></returns> 95 public static IEnumerable<ClaimsIdentity> GetClaims(this HttpContext context) 96 { 97 return context.User?.Identities; 98 } 99 //public static int GetRole(this HttpContext context) 100 //{ 101 // var roleid = context.User.FindFirstValue(ClaimTypes.Role) ?? "0"; 102 103 // return int.Parse(roleid); 104 //} 105 106 public static string GetUserAgent(this HttpContext context) 107 { 108 return context.Request.Headers["User-Agent"]; 109 } 110 111 /// <summary> 112 /// 获取请求令牌 113 /// </summary> 114 /// <param name="context"></param> 115 /// <returns></returns> 116 public static string GetToken(this HttpContext context) 117 { 118 return context.Request.Headers["Authorization"]; 119 } 120 121 /// <summary> 122 /// 获取请求Url 123 /// </summary> 124 /// <param name="context"></param> 125 /// <returns></returns> 126 public static string GetRequestUrl(this HttpContext context) 127 { 128 return context != null ? context.Request.Path.Value : ""; 129 } 130 131 /// <summary> 132 /// 获取请求参数 133 /// </summary> 134 /// <param name="context"></param> 135 /// <returns></returns> 136 public static string GetQueryString(this HttpContext context) 137 { 138 return context != null ? context.Request.QueryString.Value : ""; 139 } 140 141 /// <summary> 142 /// 获取body请求参数 143 /// </summary> 144 /// <param name="context"></param> 145 /// <returns></returns> 146 public static string GetBody(this HttpContext context) 147 { 148 context.Request.EnableBuffering(); 149 //context.Request.Body.Seek(0, SeekOrigin.Begin); 150 //using var reader = new StreamReader(context.Request.Body, Encoding.UTF8); 151 ////需要使用异步方式才能获取 152 //return reader.ReadToEndAsync().Result; 153 string body = string.Empty; 154 var buffer = new MemoryStream(); 155 context.Request.Body.Seek(0, SeekOrigin.Begin); 156 context.Request.Body.CopyToAsync(buffer); 157 buffer.Position = 0; 158 try 159 { 160 using StreamReader streamReader = new(buffer, Encoding.UTF8); 161 body = streamReader.ReadToEndAsync().Result; 162 } 163 finally 164 { 165 buffer?.Dispose(); 166 } 167 return body; 168 } 169 170 /// <summary> 171 /// 获取浏览器信息 172 /// </summary> 173 /// <param name="context"></param> 174 /// <returns></returns> 175 public static ClientInfo GetClientInfo(this HttpContext context) 176 { 177 var str = context.GetUserAgent(); 178 var uaParser = Parser.GetDefault(); 179 ClientInfo c = uaParser.Parse(str); 180 181 return c; 182 } 183 184 /// <summary> 185 /// 根据IP获取地理位置 186 /// </summary> 187 /// <returns></returns> 188 public static string GetIpInfo(string IP) 189 { 190 var ipInfo = IpTool.Search(IP); 191 return ipInfo?.Province + "-" + ipInfo?.City + "-" + ipInfo?.NetworkOperator; 192 } 193 194 /// <summary> 195 /// 设置请求参数 196 /// </summary> 197 /// <param name="reqMethod"></param> 198 /// <param name="context"></param> 199 public static string GetRequestValue(this HttpContext context, string reqMethod) 200 { 201 string param = string.Empty; 202 203 if (HttpMethods.IsPost(reqMethod) || HttpMethods.IsPut(reqMethod) || HttpMethods.IsDelete(reqMethod)) 204 { 205 param = context.GetBody(); 206 string regex = "(?<=\"password\":\")[^\",]*"; 207 param = Regex.Replace(param, regex, "***"); 208 } 209 if (param.IsEmpty()) 210 { 211 param = context.GetQueryString(); 212 } 213 return param; 214 } 215 }

 

标签:return,string,扩展,static,context,HttpContext,public
From: https://www.cnblogs.com/leon1128/p/18262128

相关文章

  • 查路径大纲,对于更复杂的入侵事件,可能需要更深入的技术知识和专业工具来进行排查和分析
    一个简单的Windows初级入侵排查路径大纲:收集信息:确定受影响的系统和用户收集有关入侵的详细信息,包括可能的攻击向量和时间线分析日志:检查Windows事件日志,特别关注安全事件和异常活动分析网络流量日志,查找异常连接或数据传输扫描系统:运行杀毒软件和安全扫描工具......
  • C# 13(.Net 9) 中的新特性 - 扩展类型
    C#13即.Net9按照计划会在2024年11月发布,目前一些新特性已经定型,今天让我们来预览一个比较大型比较重要的新特性:扩展类型Extensiontypes在5月份的微软Build大会中的What’snewinC#13会议上,两位大佬花了很长的篇幅来演示这个特性。这个特性一直是大家很关心的,在g......
  • Chrome扩展开发使 Service Worker 保持活跃状态
    ServiceWorker设计为独立于单个页面的后台线程,它通常在没有控制任何页面(clients)时会被浏览器停止或处于等待状态。但是,如果你希望即使在插件页面关闭后,ServiceWorker仍然保持活跃,可以尝试以下方法:使用多个页面:保持至少一个页面(如后台管理页面)打开,该页面由ServiceWorker控......
  • Linux基本命令详细讲解和扩展
     1.基本命令和操作文件和目录操作ls:列出目录内容示例:ls-l/etc 列出 /etc 目录的详细内容。cd:更改目录示例:cd/var/log 切换到 /var/log 目录。cp:复制文件或目录示例:cpfile1.txtfile2.txt 复制 file1.txt 为 file2.txt。mv:移动或重命名文件或目......
  • 掌握JavaScript ES6精髓:探索函数和对象的高级扩展与实用技巧
    序言JavaScript,作为前端开发中不可或缺的语言,已经发展到了ECMAScript2015(简称ES6)以及后续的版本。ES6带来了诸多语法上的改进和创新,使得代码更加简洁、优雅,同时也提供了更多的编程模式和实用技巧。本文将带领读者探索ES6中函数和对象的高级扩展及其实用技巧,同时结合最新......
  • Laravel中的二维码扩展包
    Laravel中有几个不错的二维码打印扩展包可以选择使用,其中比较常见的有:Simplesoftwareio/simple-qrcode:这是一个简单易用的二维码生成工具,支持多种格式输出,包括PNG、SVG等。文档地址:https://github.com/SimpleSoftwareIO/simple-qrcodeMilon/barcode:这个扩展包......
  • UML:用例图的扩展点特性详解
    引言UML(统一建模语言)用例图是一种常用的系统建模工具,它可以帮助我们直观地表示系统的功能和用户的交互。这里将重点讲解UML用例图中的扩展点(ExtensionPoint)特性,通过具体示例深入理解这一概念。什么是扩展点?扩展点是UML用例图中的一个重要概念,它允许我们在用例的基础上添......
  • 如何在vTestStudio里读取扩展数据(ExtendedData)
    我们使用1906+故障码+扩展信息序号来获取故障码扩展信息,如何在vTestStudio的testtable中使用testcommand读取,有两种方法:1.使用DiagnosticService2.使用FaultMemoryDTCs要注意如果使用FaultMemoryDTCs这个命令,默认EnvironmentData发送的命令是1904(快照信息)......
  • matlab误差估计扩展卡尔
    在MATLAB中实现扩展卡尔曼滤波器(ExtendedKalmanFilter,EKF)通常涉及对非线性系统的状态进行估计。扩展卡尔曼滤波是一种从标准的卡尔曼滤波器扩展而来的算法,它适用于处理具有非线性动态模型和/或观测模型的系统。一个非线性系统可以使用泰勒级数展开来近似为线性系统,这使得......
  • JupyterLab使用指南(五):JupyterLab的 扩展
    1.什么是JupyterLab的扩展JupyterLab扩展(Extension)是一种插件机制,用于增强JupyterLab的功能。通过安装扩展,用户可以添加新的功能、改进现有功能,甚至自定义界面和工作流。扩展可以覆盖各种用途,从代码补全、数据可视化到版本控制和协作工具。2.扩展的安装JupyterLab......