如何为映射到路由 robots.txt 的控制器操作附加 Sitecore 上下文?
How to attach Sitecore context for controller action mappled to route robots.txt?
在 Sitecore 中,我正在尝试为我们的客户设置一种方法来修改内容树中的 robots.txt 文件。我正在尝试设置一个 MVC 控制器操作,该操作映射到路由 "robots.txt" 并将 return 文件内容。我的控制器看起来像这样:
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 设置中将其添加为允许的扩展名。还有什么我可能遗漏的吗?
这纯属猜测,但您可能还必须将其添加到 httpRequestBegin
中 Sitecore.Pipelines.HttpRequest.FilterUrlExtensions
的允许扩展名中。
好的,我找到问题了。我假设需要将 txt 添加到 Sitecore.Pipelines.PreprocessRequest.FilterUrlExtensions
设置的允许扩展名中是正确的。但是 robots.txt 列在配置文件中的 IgnoreUrlPrefixes
设置下。这导致 sitecore 忽略该请求。我已将其从该列表中删除,现在运行良好。
在 Sitecore 中,我正在尝试为我们的客户设置一种方法来修改内容树中的 robots.txt 文件。我正在尝试设置一个 MVC 控制器操作,该操作映射到路由 "robots.txt" 并将 return 文件内容。我的控制器看起来像这样:
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 设置中将其添加为允许的扩展名。还有什么我可能遗漏的吗?
这纯属猜测,但您可能还必须将其添加到 httpRequestBegin
中 Sitecore.Pipelines.HttpRequest.FilterUrlExtensions
的允许扩展名中。
好的,我找到问题了。我假设需要将 txt 添加到 Sitecore.Pipelines.PreprocessRequest.FilterUrlExtensions
设置的允许扩展名中是正确的。但是 robots.txt 列在配置文件中的 IgnoreUrlPrefixes
设置下。这导致 sitecore 忽略该请求。我已将其从该列表中删除,现在运行良好。