using Elsa.Http.Options; using Microsoft.Extensions.Options; namespace Elsa.Http.Services; /// public class DefaultAbsoluteUrlProvider : IAbsoluteUrlProvider { private readonly IOptions _options; /// /// Initializes a new instance of the class. /// public DefaultAbsoluteUrlProvider(IOptions options) => _options = options; /// 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); } }