2015-02-09 53 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

這是一個純粹的猜測,但您可能還必須將其添加到httpRequestBegin的允許擴展名Sitecore.Pipelines.HttpRequest.FilterUrlExtensions中。

相關問題