HttpContextExtension.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. using Microsoft.AspNetCore.Http;
  2. using Newtonsoft.Json;
  3. using Newtonsoft.Json.Linq;
  4. namespace Alchemy.Core.Extensions
  5. {
  6. public static class HttpContextExtension
  7. {
  8. /// <summary>
  9. /// 获取请求的Referer
  10. /// </summary>
  11. /// <param name="context"></param>
  12. /// <returns></returns>
  13. public static string GetReferer(this HttpContext context)
  14. {
  15. return context.GetHeaderValue("Referer");
  16. }
  17. /// <summary>
  18. /// 判断是否本地请求
  19. /// </summary>
  20. /// <param name="context"></param>
  21. /// <returns></returns>
  22. public static bool IsLocalRequest(this HttpContext context)
  23. {
  24. return context.GetFromIp().Equals("127.0.0.1");
  25. }
  26. /// <summary>
  27. /// 获取接口路由
  28. /// </summary>
  29. /// <param name="context"></param>
  30. /// <returns></returns>
  31. public static string GetRoute(this HttpContext context)
  32. {
  33. return context.Request.Path;
  34. }
  35. /// <summary>
  36. /// 获取请求方法
  37. /// </summary>
  38. /// <param name="context"></param>
  39. /// <returns></returns>
  40. public static string GetMethod(this HttpContext context)
  41. {
  42. return context.Request.Method;
  43. }
  44. /// <summary>
  45. /// 获取请求URL
  46. /// </summary>
  47. /// <param name="context"></param>
  48. /// <returns></returns>
  49. public static string GetRequestUrl(this HttpContext context)
  50. {
  51. return $"{context.Request.Scheme}://{context.Request?.Host}{context.Request?.Path}{context.Request?.QueryString}";
  52. }
  53. /// <summary>
  54. /// 获取Authorization
  55. /// </summary>
  56. /// <param name="context"></param>
  57. /// <returns></returns>
  58. public static string GetAuthorization(this HttpContext context)
  59. {
  60. return context.GetHeaderValue("Authorization");
  61. }
  62. /// <summary>
  63. /// 获取X-User-Token
  64. /// </summary>
  65. /// <param name="context"></param>
  66. /// <returns></returns>
  67. public static string GetXUserToken(this HttpContext context)
  68. {
  69. return context.GetHeaderValue("X-USER-TOKEN");
  70. }
  71. /// <summary>
  72. /// 获取请求头的参数
  73. /// </summary>
  74. /// <param name="context"></param>
  75. /// <param name="strKey"></param>
  76. /// <returns></returns>
  77. public static string GetHeaderValue(this HttpContext context, string strKey)
  78. {
  79. if (context.Request.Headers.ContainsKey(strKey))
  80. return context.Request.Headers[strKey].ToString();
  81. else
  82. return string.Empty;
  83. }
  84. /// <summary>
  85. /// 获取UA
  86. /// </summary>
  87. /// <param name="context"></param>
  88. /// <returns></returns>
  89. public static string GetUserAgent(this HttpContext context)
  90. {
  91. return context.GetHeaderValue("User-Agent");
  92. }
  93. /// <summary>
  94. /// 获取请求者IP
  95. /// </summary>
  96. /// <param name="context"></param>
  97. /// <returns></returns>
  98. public static string GetFromIp(this HttpContext context)
  99. {
  100. if (context.Connection.RemoteIpAddress.IsNull())
  101. return string.Empty;
  102. else
  103. return context.Connection.RemoteIpAddress.ToString().Replace("::ffff:", "");
  104. }
  105. /// <summary>
  106. /// 获取请求者端口
  107. /// </summary>
  108. /// <param name="context"></param>
  109. /// <returns></returns>
  110. public static int GetFromPort(this HttpContext context)
  111. {
  112. return context.Connection.RemotePort;
  113. }
  114. /// <summary>
  115. /// 根据键获取请求的查询参数的值
  116. /// </summary>
  117. /// <param name="context"></param>
  118. /// <param name="strKey"></param>
  119. /// <returns></returns>
  120. public static string? GetQueryValue(this HttpContext context, string strKey)
  121. {
  122. return context.Request.Query[strKey];
  123. }
  124. /// <summary>
  125. /// 获取请求的参数json,不分请求方式
  126. /// </summary>
  127. /// <param name="context"></param>
  128. /// <returns></returns>
  129. public static async Task<string> GetParamJson(this HttpContext context)
  130. {
  131. string strParamJson = string.Empty;
  132. string strMethod = context.GetMethod();
  133. switch (strMethod)
  134. {
  135. case "GET":
  136. case "DELETE":
  137. strParamJson = context.GetQueryJson();
  138. break;
  139. case "PUT":
  140. case "POST":
  141. strParamJson = await context.GetBodyJson();
  142. break;
  143. }
  144. return strParamJson;
  145. }
  146. /// <summary>
  147. /// 获取请求的查询参数json
  148. /// </summary>
  149. /// <param name="context"></param>
  150. /// <returns></returns>
  151. public static string GetQueryJson(this HttpContext context)
  152. {
  153. JObject jo = new JObject();
  154. foreach (string strKey in context.Request.Query.Keys)
  155. {
  156. jo.Add(strKey, context.Request.Query[strKey].ToString());
  157. }
  158. return jo.ToJson();
  159. }
  160. /// <summary>
  161. /// 获取请求的body参数json
  162. /// </summary>
  163. /// <param name="context"></param>
  164. /// <returns></returns>
  165. public static async Task<string> GetBodyJson(this HttpContext context)
  166. {
  167. StreamReader stream = new StreamReader(context.Request.Body);
  168. string strRawJson = await stream.ReadToEndAsync();
  169. return JsonConvert.DeserializeObject(strRawJson).ToJson();
  170. }
  171. }
  172. }