В Sitecore Я пытаюсь настроить способ для нашего клиента изменить файл robots.txt из дерева контента. Я пытаюсь настроить действие контроллера MVC, которое сопоставляется для маршрутизации «robots.txt» и вернет содержимое файла. Мой контроллер выглядит следующим образом:Как подключить контекст Sitecore для действия контроллера, сопоставленного с маршрутом robots.txt?
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");
}
}
И маршрут конфигурации:
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" });
}
}
Это все отлично работает, если я использую маршрут без расширения «.txt». Однако после добавления расширения я получаю исключение нулевой ссылки на уровне домена из-за того, что база данных контекста равна нулю. Вот где происходит ошибка:
public Item GetItem(string contentGuid)
{
return Sitecore.Context.Database.GetItem(contentGuid);
}
Я предполагаю, что есть установка в Sitecore, который игнорирует расширение .txt. Я попытался добавить его как разрешенное расширение в настройке Sitecore.Pipelines.PreprocessRequest.FilterUrlExtensions конфигурации. Есть ли что-нибудь еще, что я могу пропустить?