[ASP.Net MVC] 取得 Request 常用资讯 (IP, 作业系统, 浏览器, 呼叫网址)

在建置网页的时候,有时候会需要知道来源端它的环境是什麽,可能是需要记录来源的 IP,或是依照来源的作业系统而显示对应的画面。
在 ASP.Net MVC 里面想要知道来源端的资讯,全部都放在 Request 这个物件里面。
接下来我就展示 Request 内常用的资讯,如果想了解 Request 内的资讯,我在後面也放上完整取得 Rquest 内的资讯。

Request 常用资讯

常用资讯里面我列出了 5 个项目,分别是来源 IP, 作业系统, 浏览器, 呼叫网址等资讯。
看看执行的画面

程序码

StringBuilder sbMsg = new StringBuilder();

sbMsg.Append("来源IP: " + this.GetClientIP() + "<br>");
sbMsg.Append("来源系统: " + this.GetUserPlatform() + "<br>");
sbMsg.Append("来源浏览器: " + this.GetClientBrowserVersion() + "<br>");
sbMsg.Append("来源相对网址: " + Request.CurrentExecutionFilePath + "<br>");
sbMsg.Append("来源绝对网址: " + Request.Url.AbsoluteUri + "<br>");

ViewData["sbMsg"] = sbMsg.ToString();

方法程序码

/// <summary>
/// 来源 IP
/// </summary>
/// <returns></returns>
public string GetClientIP()
{
	string ClientIP = "";
	if (Request.ServerVariables["HTTP_VIA"] == null)
	{
		ClientIP = Request.ServerVariables["REMOTE_ADDR"].ToString();
	}
	else
	{
		ClientIP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
	}
	ClientIP = ClientIP.Replace("::1", "127.0.0.1");
	return ClientIP;
}

/// <summary>
/// 取得使用者系统
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public String GetUserPlatform()
{
	var ua = Request.UserAgent;

	if (ua.Contains("Android"))
		return string.Format("Android {0}", GetMobileVersion(ua, "Android"));

	if (ua.Contains("iPad"))
		return string.Format("iPad OS {0}", GetMobileVersion(ua, "OS"));

	if (ua.Contains("iPhone"))
		return string.Format("iPhone OS {0}", GetMobileVersion(ua, "OS"));

	if (ua.Contains("Linux") && ua.Contains("KFAPWI"))
		return "Kindle Fire";

	if (ua.Contains("RIM Tablet") || (ua.Contains("BB") && ua.Contains("Mobile")))
		return "Black Berry";

	if (ua.Contains("Windows Phone"))
		return string.Format("Windows Phone {0}", GetMobileVersion(ua, "Windows Phone"));

	if (ua.Contains("Mac OS"))
		return "Mac OS";

	if (ua.Contains("Windows NT 5.1") || ua.Contains("Windows NT 5.2"))
		return "Windows XP";

	if (ua.Contains("Windows NT 6.0"))
		return "Windows Vista";

	if (ua.Contains("Windows NT 6.1"))
		return "Windows 7";

	if (ua.Contains("Windows NT 6.2"))
		return "Windows 8";

	if (ua.Contains("Windows NT 6.3"))
		return "Windows 8.1";

	if (ua.Contains("Windows NT 10"))
		return "Windows 10";

	//fallback to basic platform:
	return Request.Browser.Platform + (ua.Contains("Mobile") ? " Mobile " : "");
}

/// <summary>
/// 取得远端呼叫者浏览器版本
/// </summary>
/// <returns></returns>
public string GetClientBrowserVersion()
{
	HttpBrowserCapabilitiesBase bc = Request.Browser;
	string brow_ver = bc.Browser + " " + bc.Version;
	return brow_ver;
}

列出所有 Request 资讯

如果想要完整了解 Request 内所有的资讯,可以用此语法查看

StringBuilder sbRequest = new StringBuilder();
for (int i = 0; i < Request.Headers.Count; i++)
{
	sbRequest.AppendLine(Request.Headers.GetKey(i).ToString() + "=" + Request.Headers[i] + "<br>");
}
for (int i = 0; i < Request.ServerVariables.Count; i++)
{
	sbRequest.AppendLine(Request.ServerVariables.GetKey(i).ToString() + "=" + Request.ServerVariables[i] + "<br>");
}
ViewData["sbRequest"] = sbRequest.ToString();

执行後呈现的画面

显示的资讯太多,後面就拍不到了,大家可以自己试试看喔。

相关学习文章

[C#] Base64 Convert.ToBase64String 基本转码及适用网址参数转码延伸应用
[C#] 取得证交所台股价格的 3 种实用方法(附范例下载)


<<:  Ruby幼幼班--Majority Element

>>:  『为什麽我的Wifi这麽慢?』

[Day 3] Leetcode 848. Shifting Letters (C++)

前言 今天的题目在这里: 848. Shifting Letters,被归类为medium,乍看之下...

day28_ARM 也想来挖矿(上)

什麽是挖矿?需要准备铁镐吗? 说到挖矿,可能很多人会想到的是显卡的涨价,让大家都觉得挖矿就是用显卡来...

【Day27】反馈元件 - Progress circle

元件介绍 Progress circle 跟上一篇 Progress bar 一样是能够展示当前进度...

Day 23 - 重覆呼叫shioaji.Shioaji()产生的记忆体问题

因为看到有人反应,重覆登出登入,会造成记忆体使用量增加,这实在是让人太好奇了,所以就想来实测一下。但...

Day19 Vue基本教学(一)

Vue.js介绍 是一个用於建立使用者介面的开源JavaScript框架,也是一个建立单页应用的We...