Code-Behind
protected void Page_Load(object sender, EventArgs e) { // debug Response.Write(string.Format("{0}: {1}<br />", "Protocol", Request.Protocol())); Response.Write(string.Format("{0}: {1}<br />", "Host", Request.Host())); Response.Write(string.Format("{0}: {1}<br />", "SubDomains", string.Join(".", Request.SubDomains()))); Response.Write(string.Format("{0}: {1}<br />", "SubDomain", Request.SubDomain())); Response.Write(string.Format("{0}: {1}<br />", "Domain", Request.Domain())); Response.Write(string.Format("{0}: {1}<br />", "BaseUrl", Request.BaseUrl())); Response.Write(string.Format("{0}: {1}<br />", "RawUrl", Request.RawUrl)); Response.Write(string.Format("{0}: {1}<br />", "AbsoluteUri", Request.Url.AbsoluteUri)); Response.Write(string.Format("{0}: {1}<br />", "AbsolutePath", Request.Url.AbsolutePath)); Response.Write(string.Format("{0}: {1}<br />", "FileName", Path.GetFileName(Request.Url.AbsolutePath))); Response.Write(string.Format("{0}: {1}<br />", "VirtualPath", VirtualPathUtility.ToAbsolute("~/"))); Response.Write(string.Format("{0}: {1}<br />", "UrlHttps", Request.UrlHttps())); Response.Write(string.Format("{0}: {1}<br />", "UrlHttp", Request.UrlHttp())); Response.Write(string.Format("{0}: {1}<br />", "PageName v1", Request.PageName())); Response.Write(string.Format("{0}: {1}<br />", "PageName v2", Request.PageName(IncludeExtension: true))); }
Extensions
// e.g. https public static string Protocol(this HttpRequest Request) { return Request.Url.Scheme; } // e.g. pavey.azurewebsites.net public static string Host(this HttpRequest Request) { return Request.Url.Host.ToLower(); } // e.g. https://pavey.azurewebsites.net/debug/?x=1&y=2 public static string UrlHttps(this HttpRequest Request) { return string.Format("https://{0}{1}", Request.Host(), Request.RawUrl); } // e.g. http://pavey.azurewebsites.net/debug/?x=1&y=2 public static string UrlHttp(this HttpRequest Request) { return string.Format("http://{0}{1}", Request.Host(), Request.RawUrl); } // e.g. true if value is formatted as a valid IPv4 address public static bool IsValidIPAddress(this string Value) { return Regex.Match(Value, "\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b").Success; } // e.g. true if testing using an IP address instead of a fully qualified host name public static bool IsIPAddress(this HttpRequest Request) { return Request.Host().IsValidIPAddress(); } // e.g. true if testing using localhost public static bool IsLocalHost(this HttpRequest Request) { return Request.Host().ToLower().Equals("localhost"); } // e.g. dev.www public static ListSubDomains(this HttpRequest Request) { // variables string[] MyArray = Request.Host().Split(".".ToCharArray()); List MySubDomains = new List (); // make sure this is not an ip address if (Request.IsIPAddress()) { return MySubDomains; } // make sure we have all the parts necessary if (MyArray == null) { return MySubDomains; } // last part is the tld (e.g. .com) // second to last part is the domain (e.g. mydomain) // the remaining parts are the sub-domain(s) if (MyArray.Length > 2) { for (int i = 0; i <= MyArray.Length - 3; i++) { MySubDomains.Add(MyArray[i]); } } // return return MySubDomains; } // e.g. www public static string SubDomain(this HttpRequest Request) { if (Request.SubDomains().Count > 0) { // handle cases where multiple sub-domains (e.g. dev.www) return Request.SubDomains().Last(); } else { // handle cases where no sub-domains return string.Empty; } } // e.g. azurewebsites.net public static string Domain(this HttpRequest Request) { // variables string[] MyArray = Request.Host().Split(".".ToCharArray()); // make sure this is not an ip address if (Request.IsIPAddress()) { return string.Empty; } // special case for localhost if (Request.IsLocalHost()) { return Request.Host().ToLower(); } // make sure we have all the parts necessary if (MyArray == null) { return string.Empty; } // make sure we have all the parts necessary if (MyArray.Length > 1) { return string.Format("{0}.{1}", MyArray[MyArray.Length - 2], MyArray[MyArray.Length - 1]); } // return empty string return string.Empty; } // e.g. https://pavey.azurewebsites.net/ public static string BaseUrl(this HttpRequest Request) { // variables string Authority = Request.Url.GetLeftPart(UriPartial.Authority).TrimStart('/').TrimEnd('/'); string ApplicationPath = Request.ApplicationPath.TrimStart('/').TrimEnd('/'); // add trailing slashes if necessary if (Authority.Length > 0) { Authority += "/"; } if (ApplicationPath.Length > 0) { ApplicationPath += "/"; } // return return string.Format("{0}{1}", Authority, ApplicationPath); } // e.g. default, default.aspx public static string PageName(this HttpRequest Request, bool IncludeExtension = false, bool IncludeQueryString = false) { // variables string AbsolutePath = Request.Url.AbsolutePath; string PageName = Path.GetFileName(AbsolutePath); string Extension = Path.GetExtension(AbsolutePath); string QueryString = Request.QueryString.ToString(); // remove extension if (!IncludeExtension && !IncludeQueryString && PageName.HasValue()) { PageName = PageName.Replace(Extension, string.Empty); } // include querystring if (IncludeQueryString && PageName.HasValue() && QueryString.HasValue()) { PageName = string.Format("{0}?{1}", PageName, QueryString); } // return return PageName; }
Click here to see a demo with sample output.
Matt Pavey is a Microsoft Certified software developer who specializes in ASP.Net, VB.Net, C#, AJAX, LINQ, XML, XSL, Web Services, SQL, jQuery, and more. Follow on Twitter @matthewpavey
Very cool, need to make an extension method on HttpRequest.Url to return these properties.
ReplyDeleteGreat idea Jay. I've updated the code to move all of these properties to an extensions class instead. They extend the HttpRequest (opposed to just the Url) since a couple of them rely on more than just the Url (e.g. ApplicationPath), so this keeps it pretty generic and clean. Thanks!
ReplyDelete