2015-02-09 3 views
1

В 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 конфигурации. Есть ли что-нибудь еще, что я могу пропустить?

ответ

3

Хорошо, я нашел проблему. Я был прав, полагая, что txt необходимо добавить в разрешенные расширения для настройки Sitecore.Pipelines.PreprocessRequest.FilterUrlExtensions. Однако файл robots.txt был указан в параметре IgnoreUrlPrefixes в файле конфигурации. Это заставило sitecore игнорировать этот запрос. Я удалил его из этого списка, и теперь он отлично работает.

1

Это чистое предположение, но вы также можете добавить его к разрешенным расширениям Sitecore.Pipelines.HttpRequest.FilterUrlExtensions в httpRequestBegin.

 Смежные вопросы

  • Нет связанных вопросов^_^