In one of my web projects, I needed to pass the name of a specific URL inside the application to another application. So the first task was: how do I find the absolute URL of an ASP.Net application’s root directory.
I tried ResolveClientUrl, which, according to MSDN, returns
A fully qualified URL to the specified resource suitable for use on the browser
As I was expecting an absolute URL from this description, it turned out, it doesn’t. (There also seems to be a terminological confusion between a Fully Qualified Domain Name, and Absolute and Relative URLs)
Both ResolveUrl and ResolveClientUrl create URLs relative to the page’s URL or the application root, but no absolute URL.
Fortunately, I found this entry on geekpedia, which provided a solution (that I was very close to develop on my own 😉 )
public string FullyQualifiedApplicationPath { get { //Return variable declaration string appPath = null; //Getting the current context of HTTP request HttpContext context = HttpContext.Current; //Checking the current context content if (context != null) { //Formatting the fully qualified website url/name appPath = string.Format("{0}://{1}{2}{3}", context.Request.Url.Scheme, context.Request.Url.Host, context.Request.Url.Port == 80 ? string.Empty : ":" + context.Request.Url.Port, context.Request.ApplicationPath); } if (!appPath.EndsWith("/")) appPath += "/"; return appPath; } }
Of course, if you are inside a Page’s context, this reduced version is sufficient
string appPath = string.Format("{0}://{1}{2}{3}", context.Request.Url.Scheme, context.Request.Url.Host, context.Request.Url.Port == 80 ? string.Empty : ":" + context.Request.Url.Port, context.Request.ApplicationPath); if (!appPath.EndsWith("/")) appPath += "/";
I love you 🙂 …
Thank you for the example.
Just one note: there is no point checking context against null as you’ll get NPE in the next if
It’s been a while since this was wirtten, but stil worth a comment. It’s indeed valuable to check context for null since you don’t know if this is being called during a request. But the braces in that if-block should extend one statement further — if context is null, appPath will be null, and the check whether it .EndsWith anything will throw an exception.