架构师_程序员

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 256|回复: 0

[ASP.NET] asp.net 获取客户端浏览器请求信息

[复制链接]
跳转到指定楼层
楼主
发表于 2019-8-14 11:07:23
zu
在整个架构中,网站可能需要用到负载均衡、cdn、云盾等各种服务,在用户访问到真实服务器的时候,需要经过层层代理,你是否遇到过以下问题:

用户明明登录成功了,跳转到首页还显示未登录
用户post提交数据,后台没有收到提交的内容
用户正常访问网址,返回的内容是错误的,本地测试有没有任何问题

正是由于经过层层代理访问,我们在配置不当时候,代理可能会丢弃一些内容,例如:useragent、cookie、请求头、url问号参数等等。我们也找不出具体是哪里的原因。

这时候,能有一个页面来展示用户请求的信息,显得尤为重要,如下图:



代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Web.Routing;

  7. namespace itsvse
  8. {
  9.     public static class HttpRequestHelper
  10.     {
  11.         /// <summary>
  12.         /// 获取客户端IP
  13.         /// </summary>
  14.         /// <param name="req"></param>
  15.         /// <returns></returns>
  16.         public static string GetClientIP(RequestContext req, bool proxy)
  17.         {
  18.             try
  19.             {
  20.                 if (proxy)
  21.                 {
  22.                     string temp = req.HttpContext.Request.Headers["X-Forwarded-For"];
  23.                     if (!string.IsNullOrWhiteSpace(temp))
  24.                     {
  25.                         return temp;
  26.                     }
  27.                 }
  28.                 string result = req.HttpContext.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
  29.                 if (string.IsNullOrEmpty(result))
  30.                 {
  31.                     result = req.HttpContext.Request.ServerVariables["REMOTE_ADDR"];
  32.                 }
  33.                 if (string.IsNullOrEmpty(result))
  34.                 {
  35.                     result = req.HttpContext.Request.UserHostAddress;
  36.                 }
  37.                 if (string.IsNullOrEmpty(result))
  38.                 {
  39.                     result = "0.0.0.0";
  40.                 }
  41.                 return result;
  42.             }
  43.             catch
  44.             {
  45.                 return "0.0.0.0";
  46.             }
  47.         }

  48.         /// <summary>
  49.         /// 获取客户端信息
  50.         /// </summary>
  51.         /// <param name="req"></param>
  52.         /// <returns></returns>
  53.         public static List<string> GetClientInfo(System.Web.HttpRequestBase req) {
  54.             List<string> vs = new List<string>();
  55.             string userAgent = req.UserAgent == null ? "无" : req.UserAgent;
  56.             vs.Add("您的系统信息为:");
  57.             vs.Add("客户端IP[Request.UserHostAddress]:" + req.UserHostAddress);
  58.             vs.Add("浏览器类型[Request.Browser.Browser]:" + req.Browser.Browser);
  59.             vs.Add("浏览器标识[Request.Browser.Id]:" + req.Browser.Id);
  60.             vs.Add("浏览器版本号[Request.Browser.Version]:" + req.Browser.Version);
  61.             vs.Add("浏览器是不是测试版本[Request.Browser.Beta]:" + req.Browser.Beta);
  62.             vs.Add("浏览器类型[Request.Browser.Type]:" + req.Browser.Type);
  63.             vs.Add("是否支持框架网页[Request.Browser.Frames]:" + req.Browser.Frames);
  64.             vs.Add("客户端IP[GetClinetIp()]:" + GetClientIP(req.RequestContext, true));
  65.             vs.Add("是否支持Cookie[Request.Browser.Cookies]:" + req.Browser.Cookies);
  66.             vs.Add("Cookie:" + req.Headers["cookie"]?.ToString());
  67.             vs.Add("请求方式:" + req.HttpMethod);
  68.             vs.Add("请求URL:" + req.Url.ToString());
  69.             vs.Add("请求URL Query:" + req.Url.Query);
  70.             foreach (var item in req.Headers.AllKeys)
  71.             {
  72.                 vs.Add($"请求 Headers {item}:" + req.Headers[item]);
  73.             }
  74.             vs.Add("浏览器JScript版本[Request.Browser.JScriptVersion]:" + req.Browser.JScriptVersion);
  75.             vs.Add("浏览器类型[Request.Browser.Type]:" + req.Browser.Type);
  76.             vs.Add("客户端的操作系统[Request.Browser.Platform]:" + req.Browser.Platform);
  77.             vs.Add("客户端的操作系统[GetHoverTreeOSName(userAgent)]:" + GetHoverTreeOSName(userAgent));
  78.             vs.Add("是不是win16系统[Request.Browser.Win16]:" + req.Browser.Win16);
  79.             vs.Add("是不是win32系统[Request.Browser.Win32]:" + req.Browser.Win32);
  80.             vs.Add("客户端.NET Framework版本:Request.Browser.ClrVersion]:" + req.Browser.ClrVersion);
  81.             vs.Add("是否支持Java[Request.Browser.JavaApplets]:" + req.Browser.JavaApplets);
  82.             if (req.ServerVariables["HTTP_UA_CPU"] == null)
  83.                 vs.Add("CPU 类型[Request.ServerVariables["HTTP_UA_CPU"]]:未知");
  84.             else
  85.                 vs.Add("CPU 类型[Request.ServerVariables["HTTP_UA_CPU"]]:" + req.ServerVariables["HTTP_UA_CPU"]);
  86.             vs.Add("UserAgent信息[Request.UserAgent]:" + userAgent);
  87.             return vs;
  88.         }

  89.         /// <summary>
  90.         /// 根据 User Agent 获取操作系统名称
  91.         /// </summary>
  92.         public static string GetHoverTreeOSName(string userAgent)
  93.         {
  94.             string m_hvtOsVersion = "未知";
  95.             if (userAgent.Contains("NT 6.4"))
  96.             {
  97.                 m_hvtOsVersion = "Windows 10";
  98.             }
  99.             else
  100.             if (userAgent.Contains("NT 6.3"))
  101.             {
  102.                 m_hvtOsVersion = "Windows 8.1";
  103.             }
  104.             else
  105.             if (userAgent.Contains("NT 6.2"))
  106.             {
  107.                 m_hvtOsVersion = "Windows 8";
  108.             }
  109.             else
  110.             if (userAgent.Contains("NT 6.1"))
  111.             {
  112.                 m_hvtOsVersion = "Windows 7";
  113.             }
  114.             else
  115.             if (userAgent.Contains("NT 6.0"))
  116.             {
  117.                 m_hvtOsVersion = "Windows Vista/Server 2008";
  118.             }
  119.             else if (userAgent.Contains("NT 5.2"))
  120.             {
  121.                 m_hvtOsVersion = "Windows Server 2003";
  122.             }
  123.             else if (userAgent.Contains("NT 5.1"))
  124.             {
  125.                 m_hvtOsVersion = "Windows XP";
  126.             }
  127.             else if (userAgent.Contains("NT 5"))
  128.             {
  129.                 m_hvtOsVersion = "Windows 2000";
  130.             }
  131.             else if (userAgent.Contains("NT 4"))
  132.             {
  133.                 m_hvtOsVersion = "Windows NT4";
  134.             }
  135.             else if (userAgent.Contains("Me"))
  136.             {
  137.                 m_hvtOsVersion = "Windows Me";
  138.             }
  139.             else if (userAgent.Contains("98"))
  140.             {
  141.                 m_hvtOsVersion = "Windows 98";
  142.             }
  143.             else if (userAgent.Contains("95"))
  144.             {
  145.                 m_hvtOsVersion = "Windows 95";
  146.             }
  147.             else if (userAgent.Contains("Mac"))
  148.             {
  149.                 m_hvtOsVersion = "Mac";
  150.             }
  151.             else if (userAgent.Contains("Unix"))
  152.             {
  153.                 m_hvtOsVersion = "UNIX";
  154.             }
  155.             else if (userAgent.Contains("Linux"))
  156.             {
  157.                 m_hvtOsVersion = "Linux";
  158.             }
  159.             else if (userAgent.Contains("SunOS"))
  160.             {
  161.                 m_hvtOsVersion = "SunOS";
  162.             }
  163.             return m_hvtOsVersion;
  164.         }

  165.     }
  166. }

复制代码






上一篇:sketchup2019渲染插件及教程
下一篇:嗯 是这样的
帖子永久地址: 

架构师_程序员 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与架构师_程序员享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和架构师_程序员的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、架构师_程序员管理员和版主有权不事先通知发贴者而删除本文

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|Archiver|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2019-12-13 15:14

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表