Enable CORS for API in Sitecore

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>

Leave a comment