Sometimes we do need to create web APIs for ajax calls in our Sitecore solution.
By doing a normal web API will not initialize Sitecore pipeline, so this makes Sitecore.Context.Site || Sitecore.Context.Database null.
To get the normal Sitecore context we need to add a custom route to route table and add it to Sitecore pipeline.
Steps to follow:
1. Add your custom Route to RouteTable.
2. Add your custom processor at the end of the initialize pipeline.
3. Inherit your custom Sitecore API controller from SitecoreController
public class RegisterCustomRoute
{
public virtual void Process(PipelineArgs args)
{
RouteTable.Routes.MapRoute("RouteName", "CustomApi/{controller}/{action}/");
}
}
<sitecore>
<pipelines>
<initialize>
<processor patch:after="processor[@type='Sitecore.Pipelines.Loader.EnsureAnonymousUsers, Sitecore.Kernel']" type="sitecoreBlog.tools4geeks.Custom.RegisterCustomRoute, sitecoreBlog.tools4geeks"/>
</initialize>
</pipelines>
</sitecore>
While creating a controller inherit it from SitecoreController.
This is it, now you got fully flexible sitecore API which can be useful for ajax calls with in sitecoreContext.