sharepointspsitesitecollection

Issus deleting a site collection


I'm currently doing some test where I try to delete a site collection programmatically. Thereby I realized some strange behavior by SharePoint.

I used the following code to test the site collection deletion.

private static void DeleteSiteCollection(string urlSiteToDelete)
{
    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
       SPWebApplication webApp = SPWebApplication.Lookup(new Uri("http://wssdev06"));
       webApp.Sites.Delete(urlSiteToDelete);                    
       webApp.Update();
    });
}

So when I call the method with the url of an existing site collection the site collection will be deleted as expected. But when I call the method with null, the empty string or an url which is not connected to a site collection then SharePoint deletes the site collection which resides under root (e.g. http://wssdev06/).

I'm not sure if I'm too dump to use this SPSiteCollection.Delete() method or if I did not understand the conecpt of site collections and managed paths, but I think this a really strange and alarming behavior.

I could repoduce this behavoir on different web application but had no option to test in on another SharePoint environment yet.

So am I doing something wrong or is this a bug?

UPDATE:

So I did some more investigations and realized that this must have something to do with the indexer of the SPSiteCollection class which returns the root site collection if there is no site collection located under the given url. Looks like a bug.


Solution

  • Whenever you ask SharePoint to find a Site Collection using an Url it'll do it's best to return a SPSite even if it means that it'll have to ignore part of the Url.

    Sometimes this is a very good thing. f.i. if you have the full url of a list and want to find the corresponding SPSite and SPWeb.

    But it can be very dangerous like when you're deleting Site collections and maybe make a spelling mistake. If you want to make sure you get the right Site Collection the lookup the SPSite first and check that the SPSite you get has the Url that you want.

    BR

    Per