private HttpManagementPayload GetClientResponseLinks()

in src/WebJobs.Extensions.DurableTask/HttpApiHandler.cs [1256:1316]


        private HttpManagementPayload GetClientResponseLinks(
             HttpRequestMessage request,
             string instanceId,
             string taskHubName,
             string connectionName,
             bool returnInternalServerErrorOnFailure = false)
        {
            Uri notificationUri = this.GetWebhookUri();
            Uri baseUri = request?.RequestUri ?? notificationUri;

            bool useForwardedHost = this.config.Options.HttpSettings.UseForwardedHost;

            if (useForwardedHost && request != null)
            {
                if (request.Headers.TryGetValues("X-Forwarded-Host", out var forwardedHost) &&
                    request.Headers.TryGetValues("X-Forwarded-Proto", out var forwardedProto))
                {
                    baseUri = new UriBuilder(baseUri)
                    {
                        Host = forwardedHost.FirstOrDefault(),
                        Scheme = forwardedProto.FirstOrDefault(),
                    }.Uri;
                }
            }

            // e.g. http://{host}/runtime/webhooks/durabletask?code={systemKey}
            string hostUrl = baseUri.GetLeftPart(UriPartial.Authority);
            string baseUrl = hostUrl + notificationUri.AbsolutePath.TrimEnd('/');
            string allInstancesPrefix = baseUrl + "/" + InstancesControllerSegment;
            string instancePrefix = allInstancesPrefix + WebUtility.UrlEncode(instanceId);

            string taskHub = WebUtility.UrlEncode(taskHubName ?? this.durableTaskOptions.HubName);
            string connection = WebUtility.UrlEncode(connectionName ?? this.config.GetDefaultConnectionName());

            string querySuffix = $"{TaskHubParameter}={taskHub}&{ConnectionParameter}={connection}";
            if (!string.IsNullOrEmpty(notificationUri.Query))
            {
                // This is expected to include the auto-generated system key for this extension.
                querySuffix += "&" + notificationUri.Query.TrimStart('?');
            }

            var httpManagementPayload = new HttpManagementPayload
            {
                Id = instanceId,
                StatusQueryGetUri = instancePrefix + "?" + querySuffix,
                SendEventPostUri = instancePrefix + "/" + RaiseEventOperation + "/{eventName}?" + querySuffix,
                TerminatePostUri = instancePrefix + "/" + TerminateOperation + "?reason={text}&" + querySuffix,
                RewindPostUri = instancePrefix + "/" + RewindOperation + "?reason={text}&" + querySuffix,
                PurgeHistoryDeleteUri = instancePrefix + "?" + querySuffix,
                RestartPostUri = instancePrefix + "/" + RestartOperation + "?" + querySuffix,
                SuspendPostUri = instancePrefix + "/" + SuspendOperation + "?reason={text}&" + querySuffix,
                ResumePostUri = instancePrefix + "/" + ResumeOperation + "?reason={text}&" + querySuffix,
            };

            if (returnInternalServerErrorOnFailure)
            {
                httpManagementPayload.StatusQueryGetUri += "&returnInternalServerErrorOnFailure=true";
            }

            return httpManagementPayload;
        }