Take the 2-minute tour ×
SharePoint Stack Exchange is a question and answer site for SharePoint enthusiasts. It's 100% free, no registration required.

With SPContext.Current I can get the current site or current web. However, I would like to get the root site collection for my current web application. I know that I can get the web application from SPContext.Current.Site.WebApplication but is there a simple way to get the root site collection from that?

share|improve this question
    
May I know the reason why you want to refer root site collection directly from the non-root site collection web. –  Ravi Ranjan May 1 at 7:56
    

6 Answers 6

up vote 10 down vote accepted
// root site – eg. Web App url
string rootSiteCollectionURL = SPContext.Current.Web.Site.WebApplication.Sites[0].Url;

// site collection url
string SiteCollectionURL = SPContext.Current.Web.Site.Url;
share|improve this answer
1  
is this guaranteed to contain the root site collection though? –  Nacht Oct 23 '12 at 23:32
    
This will only work if you have enough permissions to get up to WebApplication level. –  Jussi Palo May 11 at 12:56

The answer of auhcms (http://sharepoint.stackexchange.com/a/39606/41946) is correct, but incomplete.

As it seemed strange to me that the root site collection would always be the first element in the SPWebApplication.Sites collection I decided to do a quick test.

I preformed the following steps:

  1. Created a new WebApplication
  2. Created a Site collection under the /sites managed path
  3. Created a second site collection under the root managed path

When I then checked the first element of the SPWebApplication.Sites collection, it turned out to be in fact the root site collection.

(when initializing the SPSiteCollection collection, SharePoint call the proc_getSiteNames stored procedures. This procedures retrieves the site collections from the database and orders them by 'path'... so the root, if it exists, will be first)

However, it is not required to have a site collection a the root path of the WebApplication. When there is no site collection at the root path, SPWebApplication.Sites[0] will return another existing site collection.

$site = Get-SPSite http://sp2013:32000/sites/first<br/>
$webapp = $site.WebApplication<br/>
$webapp.Sites[0].Url<br/>

http://sp2013:32000/sites/first

So when an site collection exists at the root path of the webapplication, you can retrieve it using SPWebApplication.Site[0].

You can however not be sure that the site collection at SPWebApplication.Site[0] will always be at the root path of the WebApplication.

To validate if the site collection is as the root, you could check the ServerRelativeUrl property of the SPSite instance:

public SPSite GetRootSiteCollection(SPWebApplication webApp)
{
    //no site collections created on this webApp
    if (webApp.Sites.Count == 0)
       return null;

    SPSite site = webApp.Sites[0];

    //only return the site collection if it's the root site collection.
    if (site.ServerRelativeUrl.Equals("/"))
        return site;

    return null;
}

(you should dispose the SPSite object when your are done with it)

share|improve this answer

here's a post that may be of help - Programmatically Access Root Site Collection in Multi-Site Collection Heirarchy.

share|improve this answer
    
string rootSiteCollectionURL = SPContext.Current.Web.Site.WebApplication.Sites[0].Url; // from the link above –  Supriyo SB Chatterjee Jun 27 '12 at 16:17

using (var site = new SPSite("url"))

{ using (SPWeb web = site.RootWeb)

{ string url = web.Site.RootWeb.Url;

} }

share|improve this answer

Simple way to get the root site collection from SPContext.Current:

// root site – eg. Web App url
string rootSiteCollectionURL = SPContext.Current.Web.Site.WebApplication.Sites[0].Url;

// site collection url
string SiteCollectionURL = SPContext.Current.Web.Site.Url;
share|improve this answer

Try : SPSite.RootWeb. More information at http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsite.rootweb.aspx

share|improve this answer
    
He does not want the RootWeb, but the "Root Site" –  Robert Lindgren Jun 25 '14 at 11:08

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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