在建置網頁的時候,有時候會需要知道來源端它的環境是什麼,可能是需要記錄來源的 IP,或是依照來源的作業系統而顯示對應的畫面。
在 ASP.Net MVC 裡面想要知道來源端的資訊,全部都放在 Request 這個物件裡面。
接下來我就展示 Request 內常用的資訊,如果想了解 Request 內的資訊,我在後面也放上完整取得 Rquest 內的資訊。
常用資訊裡面我列出了 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 內所有的資訊,可以用此語法查看
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 種實用方法(附範例下載)