I have an application page, added to a site collection. I open the page by the url: http://servername/sitecollection/_layout/sc/page.aspx

I have added some links, which should open the SAME Url with an additional query string. But it doesn't work. I've tried alot of methods, but all the links routes me to http://servername/_layout/sc/page.aspx.

So how can I programmaticly find the right url?

I've tried Http.Context, Request and so on, but one works. :\

So does anyone have an Idea?

Best Regards


PS: My system is SP2010 Standard Edition Service Pack 2.


Here are some of the Methods I have tried:

return SPContext.Current.Site.MakeFullUrl(SPContext.Current.Web.ServerRelativeUrl);

return SPContext.Current.Site.MakeFullUrl(SPContext.Current.Web.ServerRelativeUrl);

return HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path);

return SPContext.Current.File.Url;

return "http://" + Request.ServerVariables["SERVER_NAME"] + Request.ServerVariables["URL"];

2 Answers 2


I prefer to use following:


First one for site collection relative url and the other one for site relative url.

  • Good point - this is much 'nicer'... Dec 24, 2011 at 13:04

You can simply use:


If you need the context of the current site in the application page, use:

SPContext.Current.Web.Url + "/_layout/sc/page.aspx"
  • Hey, ok that was easy... thought about an automatic solution but it hasn't worked. So your solution fits my problem. Thank you very much! Marry Christmas!
    – Smokefoot
    Dec 23, 2011 at 14:02
  • Hope it does not throw an error when SPContext.Current.Web.Url results in "/". Dec 23, 2011 at 15:07
  • no it doesn't. It fits the problem very well.
    – Smokefoot
    Dec 28, 2011 at 15:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.