HttpContextExtension.cs 5.5 KB

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