Nick Daigle
Nick Daigle

Reputation: 51

How to attach Sitecore context for controller action mappled to route robots.txt?

In Sitecore I'm trying to set up a way for our client to modify the robots.txt file from the content tree. I am attempting to set up a MVC controller action that is mappled to route "robots.txt" and will return the file contents. My controller looks like this:

public class SeoController : BaseController
{
  private readonly IContentService _contentService;
  private readonly IPageContext _pageContext;
  private readonly IRenderingContext _renderingContext;

  public SeoController(IContentService contentService, IPageContext pageContext, IRenderingContext renderingContext, ISitecoreContext glassContext)
     : base(glassContext)
  {
     _contentService = contentService;
     _pageContext = pageContext;
     _renderingContext = renderingContext;
  }

  public FileContentResult Robots()
  {
     string content = string.Empty;
     var contentResponse = _contentService.GetRobotsTxtContent();

     if (contentResponse.Success && contentResponse.ContentItem != null)
     {
        content = contentResponse.ContentItem.RobotsText;
     }

     return File(Encoding.UTF8.GetBytes(content), "text/plain");
  }
}

And the route config:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        RouteTable.Routes.MapRoute("Robots.txt", "robots.txt", new { controller = "Seo", action = "Robots" });
    }
}

This all works great if I use a route without the ".txt" extension. However after adding the extension I get a null reference exception in the domain layer due to the context database being null. Here's where the error happens:

public Item GetItem(string contentGuid)
{
    return Sitecore.Context.Database.GetItem(contentGuid);
}

I'm assuming that there is a setting in sitecore that ignores the .txt extension. I've tried adding it as an allowed extension in the Sitecore.Pipelines.PreprocessRequest.FilterUrlExtensions setting of the config. Is there anything else I could be missing?

Upvotes: 2

Views: 760

Answers (2)

Derek Dysart
Derek Dysart

Reputation: 1396

This is a pure guess, but you might also have to add it to the allowed extensions of Sitecore.Pipelines.HttpRequest.FilterUrlExtensions in httpRequestBegin as well.

Upvotes: 1

Nick Daigle
Nick Daigle

Reputation: 51

Ok, I found the issue. I was correct in assuming that txt needed to be added to the allowed extensions for the Sitecore.Pipelines.PreprocessRequest.FilterUrlExtensions setting. However robots.txt was listed under the IgnoreUrlPrefixes setting in the config file. That was causing sitecore to ignore that request. I removed it from that list and it's working great now.

Upvotes: 3

Related Questions