[StorageAccount(StorageAccountConnectionString)]
public class ProxyFunctions
{
    private readonly IProxyService _service;

    public ProxyFunctions(IProxyService service) => _service = service ?? throw new ArgumentNullException(nameof(service));

    [FunctionName(nameof(ProxyTrigger))]
    public async Task<HttpResponseMessage> ProxyTrigger(
        [HttpTrigger(AuthorizationLevel.Function, Route = "proxy/{name}/{version}/{**path}")] HttpRequestMessage request,
        string path,
        [Table(ServicesTable, "{name}", "{version}")] ServiceEntry service)
    {
        var uri = new Uri(new Uri(service.Host), path);

        request.Headers.Host = uri.Authority;
        request.RequestUri = uri;

        return await _service.SendAsync(request).ConfigureAwait(false);
    }
}