I recently needed to create a proxy API which needed to run off my Sitecore instance – and needed to support CORS – with this being hosted as a headless nextjs application.
Here’s what we implemented:
The controller was inherited from ApiController (System.Web.Http), and we added the following attributes (System.Web.Http.Cors) – on the action (you could EnableCors on controller level as well.
[EnableCors("*", headers: "*", methods: "*")]
[System.Web.Http.Route("api/subscription/submitform")]
Once this was in place EnableCors was initiated:
using Sitecore.Pipelines;
using System.Web.Http;
namespace MySite.ContentServices.Feature.Subscription
{
public class WebApiRoute
{
public virtual void Process(PipelineArgs args)
{
HttpConfiguration config = GlobalConfiguration.Configuration;
config.EnableCors();
}
}
}`
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using MySite.ContentServices.Feature.Subscription.Controllers;
using Sitecore.DependencyInjection;
namespace MySite.ContentServices.Project.Common.DI
{
public class RegisterContainer : IServicesConfigurator
{
public void Configure(IServiceCollection serviceCollection)
{
serviceCollection.Replace(ServiceDescriptor.Transient(typeof(SubscriptionController),
typeof(SubscriptionController)));
}
}
}
Here’s the corresponding config:
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<pipelines>
<initialize>
<processor patch:after="processor[@type='Sitecore.Pipelines.Loader.EnsureAnonymousUsers, Sitecore.Kernel']" type="MySite.ContentServices.Feature.Subscription.WebApiRoute, MySite.ContentServices.Feature.Subscription"/>
</initialize>
</pipelines>
</sitecore>
</configuration>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<services>
<configurator type="MySite.ContentServices.Project.Common.DI.RegisterContainer, MySite.ContentServices.Project.Common" />
</services>
</sitecore>
</configuration>