I have a multi-site Sitecore instance with several sites defined using the physicalFolder/virtualFolder
attributes defined on the <site>
nodes all done with MVC. There is some functionality I would like to add to a page in a more native-MVC fashion where I can invoke the controller thru Javascript and update the DOM elements on the response with the updated html from the controller (ie: /api/sitecore/search/results
). The issue I am seeing, since I am inoking the controller directly/natively, it's a bit outside the Sitecore execution pipeline so I have no handle on the Sitecore.Context.Site
. Ultimately, what I would like is to do make the routing respect the virtual folder so I can at least get a handle on the SiteContext
(ie: /site1/api/sitecore/search/results
).
1 Answer
What I ended up doing is registering a single route on pipelines/initialize
:
<pipelines>
<initialize>
<processor type="MyFramework.Routing.RegisterVirtualFoldersRoutes, MyFramework" patch:before="processor[@type='Sitecore.Mvc.Pipelines.Loader.InitializeRoutes, Sitecore.Mvc']" />
</initialize>
</pipelines>
and in the pipeline itself:
namespace MyFramework.Routing
{
public class RegisterVirtualFoldersRoutes
{
public virtual void Process(PipelineArgs args)
{
RouteTable.Routes.MapRoute("VirtualFolderRouting", "{virtualFolder}/api/sitecore/{controller}/{action}/{id}", new { id = UrlParameter.Optional });
}
}
}
Without any additional customization this allowed me to invoke /site1/api/sitecore/search/results
or /site2/api/sitecore/search/results
directly and get the SiteContext
of the site respective of the virtualFolder
. I assume there may be some collisions between the virtualfolder/api/sitecore
and other defined routes, but none of them come to mind currently.
-
This perfectly worked for my virtual paths which contain no forward slashes. thanks– AlirezaJan 10, 2019 at 12:29
-
In the meantime, I'm trying to find a way to make it work with site containing slashes in their virtual folder. Do you have any idea?– AlirezaJan 10, 2019 at 12:30
-
@Alireza, could you provide an example of what kind of virtual folder you would ultimately be using?– vandshJan 10, 2019 at 17:20
-
0 Some of my websites contain one or more "/" in their virtual folders, something like /demo/v1, /demo/v2, dev/v1, dev/v2, etc. Due to some marketing and design restrictions, I have to put them in separate websites. I'm doing something now, and I'll share it here with you when it's done :)– AlirezaJan 11, 2019 at 14:28