This commit is contained in:
Shannon
2021-02-02 17:32:17 +11:00
parent c024db9d3c
commit 9e43ff8662

View File

@@ -19,105 +19,108 @@ namespace Umbraco.Web.Website.ActionResults
public class RedirectToUmbracoPageResult : IActionResult
{
private IPublishedContent _publishedContent;
private readonly Guid _key;
private readonly QueryString _queryString;
private readonly IPublishedUrlProvider _publishedUrlProvider;
private readonly IUmbracoContextAccessor _umbracoContextAccessor;
private string _url;
/// <summary>
/// Initializes a new instance of the <see cref="RedirectToUmbracoPageResult"/> class.
/// </summary>
public RedirectToUmbracoPageResult(Guid key, IPublishedUrlProvider publishedUrlProvider, IUmbracoContextAccessor umbracoContextAccessor)
{
Key = key;
_publishedUrlProvider = publishedUrlProvider;
_umbracoContextAccessor = umbracoContextAccessor;
}
/// <summary>
/// Initializes a new instance of the <see cref="RedirectToUmbracoPageResult"/> class.
/// </summary>
public RedirectToUmbracoPageResult(Guid key, QueryString queryString, IPublishedUrlProvider publishedUrlProvider, IUmbracoContextAccessor umbracoContextAccessor)
{
Key = key;
_queryString = queryString;
_publishedUrlProvider = publishedUrlProvider;
_umbracoContextAccessor = umbracoContextAccessor;
}
/// <summary>
/// Initializes a new instance of the <see cref="RedirectToUmbracoPageResult"/> class.
/// </summary>
public RedirectToUmbracoPageResult(IPublishedContent publishedContent, IPublishedUrlProvider publishedUrlProvider, IUmbracoContextAccessor umbracoContextAccessor)
{
_publishedContent = publishedContent;
Key = publishedContent.Key;
_publishedUrlProvider = publishedUrlProvider;
_umbracoContextAccessor = umbracoContextAccessor;
}
/// <summary>
/// Initializes a new instance of the <see cref="RedirectToUmbracoPageResult"/> class.
/// </summary>
public RedirectToUmbracoPageResult(IPublishedContent publishedContent, QueryString queryString, IPublishedUrlProvider publishedUrlProvider, IUmbracoContextAccessor umbracoContextAccessor)
{
_publishedContent = publishedContent;
Key = publishedContent.Key;
_queryString = queryString;
_publishedUrlProvider = publishedUrlProvider;
_umbracoContextAccessor = umbracoContextAccessor;
}
private string Url
{
get
{
if (!string.IsNullOrWhiteSpace(_url)) return _url;
if (!string.IsNullOrWhiteSpace(_url))
{
return _url;
}
if (PublishedContent is null)
{
throw new InvalidOperationException($"Cannot redirect, no entity was found for key {Key}");
}
var result = _publishedUrlProvider.GetUrl(PublishedContent.Id);
if (result == "#")
{
throw new InvalidOperationException(
$"Could not route to entity with key {Key}, the NiceUrlProvider could not generate a URL");
}
_url = result;
return _url;
}
}
public Guid Key => _key;
public Guid Key { get; }
private IPublishedContent PublishedContent
{
get
{
if (!(_publishedContent is null)) return _publishedContent;
if (!(_publishedContent is null))
{
return _publishedContent;
}
//need to get the URL for the page
_publishedContent = _umbracoContextAccessor.GetRequiredUmbracoContext().Content.GetById(_key);
// need to get the URL for the page
_publishedContent = _umbracoContextAccessor.GetRequiredUmbracoContext().Content.GetById(Key);
return _publishedContent;
return _publishedContent;
}
}
/// <summary>
/// Creates a new RedirectToUmbracoResult
/// </summary>
/// <param name="pageId"></param>
/// <param name="publishedUrlProvider"></param>
public RedirectToUmbracoPageResult(Guid key, IPublishedUrlProvider publishedUrlProvider, IUmbracoContextAccessor umbracoContextAccessor)
{
_key = key;
_publishedUrlProvider = publishedUrlProvider;
_umbracoContextAccessor = umbracoContextAccessor;
}
/// <summary>
/// Creates a new RedirectToUmbracoResult
/// </summary>
/// <param name="pageId"></param>
/// <param name="queryStringValues"></param>
/// <param name="publishedUrlProvider"></param>
public RedirectToUmbracoPageResult(Guid key, QueryString queryString, IPublishedUrlProvider publishedUrlProvider, IUmbracoContextAccessor umbracoContextAccessor)
{
_key = key;
_queryString = queryString;
_publishedUrlProvider = publishedUrlProvider;
_umbracoContextAccessor = umbracoContextAccessor;
}
/// <summary>
/// Creates a new RedirectToUmbracoResult
/// </summary>
/// <param name="publishedContent"></param>
/// <param name="publishedUrlProvider"></param>
/// <param name="umbracoContextAccessor"></param>
public RedirectToUmbracoPageResult(IPublishedContent publishedContent, IPublishedUrlProvider publishedUrlProvider, IUmbracoContextAccessor umbracoContextAccessor)
{
_publishedContent = publishedContent;
_key = publishedContent.Key;
_publishedUrlProvider = publishedUrlProvider;
_umbracoContextAccessor = umbracoContextAccessor;
}
/// <summary>
/// Creates a new RedirectToUmbracoResult
/// </summary>
/// <param name="publishedContent"></param>
/// <param name="queryString"></param>
/// <param name="publishedUrlProvider"></param>
/// <param name="umbracoContextAccessor"></param>
public RedirectToUmbracoPageResult(IPublishedContent publishedContent, QueryString queryString, IPublishedUrlProvider publishedUrlProvider, IUmbracoContextAccessor umbracoContextAccessor)
{
_publishedContent = publishedContent;
_key = publishedContent.Key;
_queryString = queryString;
_publishedUrlProvider = publishedUrlProvider;
_umbracoContextAccessor = umbracoContextAccessor;
}
/// <inheritdoc/>
public Task ExecuteResultAsync(ActionContext context)
{
if (context is null) throw new ArgumentNullException(nameof(context));
if (context is null)
{
throw new ArgumentNullException(nameof(context));
}
var httpContext = context.HttpContext;
var ioHelper = httpContext.RequestServices.GetRequiredService<IIOHelper>();