2

在 Sitecore 中,我试图为我们的客户设置一种方法来修改内容树中的 robots.txt 文件。我正在尝试设置一个映射到路由“robots.txt”并将返回文件内容的 MVC 控制器操作。我的控制器如下所示:

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 设置中将其添加为允许的扩展。还有什么我可能会丢失的吗?

4

2 回答 2

3

好的,我发现了问题。我假设需要将 txt 添加到Sitecore.Pipelines.PreprocessRequest.FilterUrlExtensions设置的允许扩展名中是正确的。但是 robots.txtIgnoreUrlPrefixes在配置文件的设置下列出。这导致 sitecore 忽略了该请求。我从该列表中删除了它,它现在运行良好。

于 2015-02-09T18:10:15.567 回答
1

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.

于 2015-02-09T17:52:22.230 回答