elsa-core/src/modules/Elsa.Http/Services/DefaultAbsoluteUrlProvider.cs

33 lines
1.3 KiB
C#
Raw Normal View History

using Elsa.Http.Options;
using Microsoft.Extensions.Options;
namespace Elsa.Http.Services;
/// <inheritdoc />
public class DefaultAbsoluteUrlProvider : IAbsoluteUrlProvider
{
private readonly IOptions<HttpActivityOptions> _options;
/// <summary>
/// Initializes a new instance of the <see cref="DefaultAbsoluteUrlProvider"/> class.
/// </summary>
public DefaultAbsoluteUrlProvider(IOptions<HttpActivityOptions> options) => _options = options;
/// <inheritdoc />
public Uri ToAbsoluteUrl(string relativePath)
{
var baseUrl = _options.Value.BaseUrl;
if (baseUrl == null)
throw new Exception(
"There was no base URL configured, which means no absolute URL can be generated from outside the context of an HTTP request. Please make sure that `HttpActivityOptions` is configured correctly. The configuration key used in most Elsa samples is usually: \"Elsa:Server:BaseUrl\"");
// To not lose any base path information, we need to ensure that:
// - Base path ends with a slash.
// - Relative path does NOT start with a slash.
var baseUri = new Uri(baseUrl.ToString().TrimEnd('/') + '/');
relativePath = relativePath.TrimStart('/');
return new Uri(baseUri, relativePath);
}
}