I want to do the following. If a user comes to a special site collection he will be redirected to a subsite. If the subsite doesn't exist it will be created.

I know that's a creation in a GETRequest and I already tested everything from AllowUnsafeUpdates to ValidateFormDigest but nothing will create the site for me. I should be something like the MySiteHost.

Do you have an idea how doing this?

  • Is it like if the site does not exists, create and redirect?
    – Unnie
    Apr 9, 2014 at 13:37
  • Can you please elaborate more what have you tried? Maybe adding some code that you have tried will help.. Apr 9, 2014 at 13:37

3 Answers 3


Create a custom 404 page for your site collection, then either add code behind to it with your own logic as when you want to create a subsite and when not..

OR in SharePoint 2013 create a custom error page, add a content editor webpart to it, and some javscript code which will create a subsite for you, but there is a lot of things that you will require to set e.g. subsite name, url etc...


I've stolen from the mysitehost. There the mysite is create with this mechanic:

 if (Page.IsPostBack)
   SPLongOperation operation = new SPLongOperation(this.Page);
   operation.LeadingHTML = "Meeting wird erstellt";

   Do site creation ...


 // This code sets an reloadAsPostBack on the site to begin site creation
 SPPageContentManager.RegisterClientScriptBlock(this.Page, base.GetType(), 
                      "CreateMySiteRepost", "document.forms[0].submit();");

When the page is loaded with GET Request then it will be posted by client code. Then you have a POST Request.


You can try setting the current HTTPContext as null, this way sharepoint does not recognise that it is a GET Request. Please see the below code, which worked for me:

using (SPSite site = new SPSite(SPContext.Current.Site.Url))
                    using (SPWeb web = site.OpenWeb())
                        HttpContext tempContext = HttpContext.Current;//create back up of context.
                       HttpContext.Current = null;//Set current context as null

                            web.AllowUnsafeUpdates = true;
                            SPWeb newWeb = web.Webs.Add("sitename", "sitename", "description", (uint)1033, "STS#0", false, false);
                        catch (Exception Ex)
                            lblMessge.Text = Ex.Message;
                            web.AllowUnsafeUpdates = false;
                            HttpContext.Current = tempContext;//Restore the context


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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