How do I find the root site URL in a Share Point 2010 project?

26,535

Solution 1

If you want to get the hostname of the current machine, it's this:

System.Net.Dns.GetHostName()

If you're looking for something using the SharePoint Object Model, try this:

new SPSite(SPServer.Local.Address.ToString())

Solution 2

I am not sure if I understood your context correctly, but you should be able to use SPContext property.

SPContext.Current.Site.Url;

Solution 3

So the problem that you are facing is that the code has to adjust to the different urls in different environments?

There are two ways to handle this

  1. Ensure that the Urls are the same in all the environments by using a host header in IIS This would result in the urls being the same in both the DEV machine and the PROD machine. (On the DEV machine you would also need to set up the BackConnectionHostNames in registry for it to work well, because you would be logging in to the DEV box and working locally from there). [1] http://www.it-notebook.org/iis/article/understanding_host_headers.htm [2] http://support.microsoft.com/kb/896861

  2. But a more standard (and realistic) way of solving this would be to keep the root site name in a config file and let the code pick it up from there. For different environments, you just need to go and update the config file. You can also automate this by seting up your installer to replace the strings based on the environment to which it is getting installed to. The advantage that you get is that you are not hard-coding the Url, and the logic is not dependent on the hostname of the server (There would definitely be scenarios where a host header is used, or an alternate access mapping resulting in the url being different from the host name of your sever). So this way you get better de-coupling.

Just my two cents.

Solution 4

For me, these hints didn't work out. I have several site collections and instead of using DNS information I found it safer to get the url of the topmost site collection of the web application like this:

[current SPWeb].Site.WebApplication.AlternateUrls[0].IncomingUrl

or (longer and resulting in an URL with trailing slash):

[current SPWeb].Site.WebApplication.AlternateUrls[0].Uri.AbsoluteUri
Share:
26,535
James Hush
Author by

James Hush

Updated on July 26, 2020

Comments

  • James Hush
    James Hush almost 4 years

    Is there a way to get the root url of the current server the Share Point application is hosted on? For example, if I want to load information from a site I'm currently typing:

    SPSite site = new SPSite(http://dev3);
    

    But when I move the development code onto the production server I have to manually replace the site URLs with the new server URLs:

    SPSite site = new SPSite(http://sp2010);
    

    I'm using C# in Visual Studio 2010.

  • JC Vivian
    JC Vivian almost 13 years
    If the code is running with in the SharePoint web application Dampe SPContext is a better solution.
  • Jason
    Jason over 10 years
    Though maybe SPContext.Current.Site.RootWeb.Url would be more suitable
  • Dylan Nicholson
    Dylan Nicholson about 10 years
    Note that there may not even be a site that that address however.