using Umbraco.Core.Models.PublishedContent;
namespace Umbraco.Web.Routing
{
///
/// This looks up a document by checking for the umbPageId of a request/query string
///
///
/// This is used by library.RenderTemplate and also some of the macro rendering functionality like in
/// macroResultWrapper.aspx
///
public class ContentFinderByPageIdQuery : IContentFinder
{
private readonly IRequestAccessor _requestAccessor;
private readonly IUmbracoContextAccessor _umbracoContextAccessor;
///
/// Initializes a new instance of the class.
///
public ContentFinderByPageIdQuery(IRequestAccessor requestAccessor, IUmbracoContextAccessor umbracoContextAccessor)
{
_requestAccessor = requestAccessor ?? throw new System.ArgumentNullException(nameof(requestAccessor));
_umbracoContextAccessor = umbracoContextAccessor ?? throw new System.ArgumentNullException(nameof(umbracoContextAccessor));
}
///
public bool TryFindContent(IPublishedRequestBuilder frequest)
{
IUmbracoContext umbCtx = _umbracoContextAccessor.UmbracoContext;
if (umbCtx == null)
{
return false;
}
if (int.TryParse(_requestAccessor.GetRequestValue("umbPageID"), out int pageId))
{
IPublishedContent doc = umbCtx.Content.GetById(pageId);
if (doc != null)
{
frequest.SetPublishedContent(doc);
return true;
}
}
return false;
}
}
}