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」拡張子のないルートを使用すると、これはすべてうまく機能します。ただし、拡張機能を追加した後、コンテキスト データベースが null であるため、ドメイン層で null 参照例外が発生します。エラーが発生する場所は次のとおりです。
public Item GetItem(string contentGuid)
{
return Sitecore.Context.Database.GetItem(contentGuid);
}
.txt 拡張子を無視する設定が sitecore にあると仮定しています。構成の Sitecore.Pipelines.PreprocessRequest.FilterUrlExtensions 設定で許可された拡張機能として追加しようとしました。私が行方不明になる可能性のあるものは他にありますか?