public static async Task <IActionResult> Run(
            [HttpTrigger(
                 AuthorizationLevel.Function,
                 nameof(HttpMethods.Post),
                 Route = null)] Player player,
            [Blob(
                 BlobConfig.Container,
                 FileAccess.Write,
                 Connection = "StorageAccount")] CloudBlobContainer cloudBlobContainer)
        {
            IActionResult result;

            if (player == null)
            {
                result = new BadRequestObjectResult("No player data in request.");
            }
            else
            {
                var blob       = cloudBlobContainer.GetBlockBlobReference($"out/cloudblob-{player.NickName}.json");
                var playerBlob = JsonConvert.SerializeObject(player);
                await blob.UploadTextAsync(playerBlob);

                result = new AcceptedResult();
            }

            return(result);
        }
        public async Task RequestContainingExistingLocationReturnsAccepted()
        {
            var locationDetailsRequestModel = CreateValidLocationDetailsRequestModel();

            var formByteArray = ToByteArray(locationDetailsRequestModel);

            _httpRequest.Setup(x => x.Body).Returns(new MemoryStream(formByteArray));

            var addResult = new WriteRequestResult {
                Status = WriteRequestStatus.Duplicate, ItemId = Guid.NewGuid()
            };

            _locationDetailsService.Setup(x => x.Add(It.IsAny <LocationDetailsDto>())).Returns(Task.FromResult(addResult));
            _mapper.Setup(x => x.Map <LocationDetailsDto>(It.IsAny <LocationDetailsRequestModel>()))
            .Returns((LocationDetailsRequestModel source) =>
            {
                return(new LocationDetailsDto()
                {
                    GameOverviewList = new Dictionary <string, int>()
                });
            });
            Environment.SetEnvironmentVariable("ReadBaseUrl", "testConfigValue");

            var expected = new AcceptedResult("", new { });
            var actual   = await _sut.Run(_httpRequest.Object, _log.Object);

            Assert.Equal(expected.GetType(), actual.GetType());
            Environment.SetEnvironmentVariable("ReadBaseUrl", null);
        }
Esempio n. 3
0
        public static IActionResult Run(
            [HttpTrigger(
                 AuthorizationLevel.Function,
                 "post",
                 Route = null)] Player player,
            [Blob(
                 "players/out/string-{rand-guid}.json",
                 FileAccess.Write)] out string playerBlob)

        {
            playerBlob = default;
            IActionResult result;

            if (player == null)
            {
                result = new BadRequestObjectResult("No player data in request.");
            }
            else
            {
                playerBlob = JsonConvert.SerializeObject(player, Formatting.Indented);
                result     = new AcceptedResult();
            }

            return(result);
        }
Esempio n. 4
0
        public static async Task <IActionResult> RunAsync(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req,
            ILogger log,
            [ServiceBus("newreview", EntityType.Topic, Connection = "topicConnectionString")] IAsyncCollector <string> outputs
            )
        {
            string rawRequestBody      = await new StreamReader(req.Body).ReadToEndAsync();
            string CorrelationId       = Guid.NewGuid().ToString();
            string statusCheckEndpoint = $"{Environment.GetEnvironmentVariable("statusCheckURL")}/{CorrelationId}";

            string reviewerMessageEnvelope = MessageHelper.DecorateJsonBody(rawRequestBody,
                                                                            new Dictionary <string, JToken>()
            {
                { "RequestCorrelationId", CorrelationId },
                { "RequestCreatedAt", DateTime.Now },
                { "RequestStatus", statusCheckEndpoint }
            }
                                                                            );

            await outputs.AddAsync(reviewerMessageEnvelope);

            AcceptedResult acceptedResultObject = new AcceptedResult();

            acceptedResultObject.Location = statusCheckEndpoint;
            return((ActionResult)acceptedResultObject);
        }
        public static async Task <IActionResult> Run(
            [HttpTrigger(
                 AuthorizationLevel.Function,
                 nameof(HttpMethods.Post),
                 Route = null)] Player player,
            IBinder binder)
        {
            var           serializedPlayer  = JsonConvert.SerializeObject(player);
            var           cloudQueueMessage = new CloudQueueMessage(serializedPlayer); // Not WindowsAzure.Storage.Queue!
            IActionResult result            = null;

            if (string.IsNullOrEmpty(player.Id))
            {
                var queueAttribute = new QueueAttribute(QueueConfig.NewPlayerErrorItems);
                var cloudQueue     = await binder.BindAsync <CloudQueue>(queueAttribute);

                await cloudQueue.AddMessageAsync(cloudQueueMessage);

                result = new BadRequestObjectResult("No player data in request.");
            }
            else
            {
                var queueAttribute = new QueueAttribute(QueueConfig.NewPlayerItems);
                var cloudQueue     = await binder.BindAsync <CloudQueue>(queueAttribute);

                await cloudQueue.AddMessageAsync(cloudQueueMessage);

                result = new AcceptedResult();
            }

            return(result);
        }
Esempio n. 6
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, methods: "post", Route = "submit")]
            HttpRequest req,
            [OrchestrationClient] DurableOrchestrationClient orchestrationClient,
            ILogger logger)
        {
            logger.LogInformation("Submission received via Http");

            string requestBody = new StreamReader(req.Body).ReadToEnd();
            var    submission  = JsonConvert.DeserializeObject <Presentation>(requestBody, new JsonSerializerSettings()
            {
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            });

            var instanceId = await orchestrationClient.StartNewAsync("ProcessSubmission", submission);

            logger.LogInformation("Submission process started", instanceId);

            string checkStatusLocacion = string.Format("{0}://{1}/api/status/{2}", req.Scheme, req.Host, instanceId); // To inform the client where to check the status
            string message             = $"Your submission has been received. To get the status, go to: {checkStatusLocacion}";

            // Create an Http Response with Status Accepted (202) to let the client know that the request has been accepted but not yet processed.
            ActionResult response = new AcceptedResult(checkStatusLocacion, message); // The GET status location is returned as an http header

            req.HttpContext.Response.Headers.Add("retry-after", "20");                // To inform the client how long to wait in seconds before checking the status

            return(response);
        }
Esempio n. 7
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, methods: "get", Route = "status/{instanceId}")] HttpRequest req,
            [OrchestrationClient] DurableOrchestrationClient orchestrationClient,
            string instanceId,
            ILogger logger)
        {
            var sourceGetStatusKey = Environment.GetEnvironmentVariable("GetStatusKey");

            // Get the built-in status of the orchestration instance. This status is managed by the Durable Functions Extension.
            var status = await orchestrationClient.GetStatusAsync(instanceId);

            if (status != null)
            {
                if (status.RuntimeStatus == OrchestrationRuntimeStatus.Running || status.RuntimeStatus == OrchestrationRuntimeStatus.Pending)
                {
                    //The URL (location header) is prepared so the client know where to get the status later.
                    string checkStatusLocacion = string.Format("{0}://{1}/api/status/{2}?code={3}", req.Scheme, req.Host, instanceId, sourceGetStatusKey);
                    string message             = $"The zip file is being processed. The current status is ''. To check the status later, go to: GET {checkStatusLocacion}"; // To inform the client where to check the status

                    // Create an Http Response with Status Accepted (202) to let the client know that the original request hasn't yet been fully processed.
                    ActionResult response = new AcceptedResult(checkStatusLocacion, message); // The GET status location is returned as an http header
                    //req.HttpContext.Response.Headers.Add("x-functions-key", sourceGetStatusKey); // add getstatus key as header
                    req.HttpContext.Response.Headers.Add("retry-after", "3");                 // To inform the client how long to wait before checking the status.
                    return(response);
                }
                else if (status.RuntimeStatus == OrchestrationRuntimeStatus.Completed)
                {
                    // Once the orchestration has been completed, an Http Response with Status OK (200) is created to inform the client that the original request has been fully processed.

                    return(new OkObjectResult($"Congratulations, your presentation with id '{instanceId}' has been Completed!"));
                }
            }
            // If status is null, then instance has not been found. Create and return an Http Response with status NotFound (404).
            return(new NotFoundObjectResult($"Whoops! Something went wrong. Please check if your submission Id is correct. Submission '{instanceId}' not found."));
        }
        private static async Task <IActionResult> UpsertPerson(
            string path,
            PersonModel model,
            Person existing,
            string jurisdiction,
            IAsyncCollector <Person> peopleCollection,
            ILogger log,
            CancellationToken cancellationToken)
        {
            Person        record;
            IActionResult response;

            if (existing == null)
            {
                log.LogInformation("Creating new person record.");
                record = model.ToData(jurisdiction);
                await peopleCollection.AddAsync(record, cancellationToken);

                response = new CreatedResult(path, new CreatePersonResponseModel
                {
                    Id = record.Id
                });
            }
            else
            {
                log.LogInformation("Updating existing person record.");
                record = model.Map(existing);
                await peopleCollection.AddAsync(record, cancellationToken);

                response = new AcceptedResult();
            }

            return(response);
        }
Esempio n. 9
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(
                 AuthorizationLevel.Function,
                 nameof(HttpMethods.Post),
                 Route = null)] Player player,
            [Blob(
                 "players/out/stream-{rand-guid}.json",
                 FileAccess.Write)] Stream playerStream)
        {
            IActionResult result;

            if (player == null)
            {
                result = new BadRequestObjectResult("No player data in request.");
            }
            else
            {
                using var writer = new StreamWriter(playerStream);
                var jsonData = JsonConvert.SerializeObject(player);
                await writer.WriteLineAsync(jsonData);

                result = new AcceptedResult();
            }

            return(result);
        }
Esempio n. 10
0
        public void Put_Success()
        {
            // Arrange
            CashDeskItem item = new CashDeskItem()
            {
                Id   = "5c012842f8e2708cf041e247",
                Name = "Caisse_01"
            };

            _cashDeskServicesMock.Setup(x => x.GetCashDesk(item.Id)).Returns(Task.FromResult(item));
            _cashDeskServicesMock.Setup(x => x.UpdateCashDesk(item.Id, item))
            .ReturnsAsync(true)
            .Verifiable();
            _cashDeskFlowValidMock
            .Setup(x => x.IsValidOperation(BaseValidatorType.Update, It.IsAny <CashDeskItem>(), It.IsAny <CashDeskItem>()))
            .Returns(true)
            .Verifiable();

            // Act
            CashDeskController controller   = new CashDeskController(_cashDeskServicesMock.Object, _cashDeskFlowValidMock.Object);
            ActionResult       actionResult = controller.Put(item);

            // Assert.
            Assert.IsType <AcceptedResult>(actionResult);
            AcceptedResult actionResultType = actionResult as AcceptedResult;

            Assert.Equal(actionResultType.StatusCode, (int)System.Net.HttpStatusCode.Accepted);
            _cashDeskServicesMock.Verify();
            _cashDeskFlowValidMock.Verify();
        }
        public static async Task <IActionResult> Run(
            [HttpTrigger(
                 AuthorizationLevel.Function,
                 nameof(HttpMethods.Post),
                 Route = null)] Player[] players,
            [Queue(QueueConfig.NewPlayerItems)] IAsyncCollector <Player> collector)
        {
            IActionResult result = null;

            if (players.Any())
            {
                foreach (var player in players)
                {
                    await collector.AddAsync(player);
                }

                result = new AcceptedResult();
            }
            else
            {
                result = new BadRequestObjectResult("No player data in request.");
            }

            return(result);
        }
        public static async Task <IActionResult> Run(
            [HttpTrigger(
                 AuthorizationLevel.Function,
                 "post",
                 Route = null)] Player player,
            IBinder binder)

        {
            //playerBlob = default;
            IActionResult result;

            if (player == null)
            {
                result = new BadRequestObjectResult("No player data in request.");
            }
            else
            {
                // playerBlob = JsonConvert.SerializeObject(player, Formatting.Indented);
                var blobAttribute1 = new BlobAttribute($"players/out/dynamic-{player.Id}");
                var blobAttribute  = new BlobAttribute($"players/out/dynamic-{player.Id}.json");
                using (var output = await binder.BindAsync <TextWriter>(blobAttribute))
                {
                    await output.WriteAsync(JsonConvert.SerializeObject(player));
                }

                result = new AcceptedResult();
            }

            return(result);
        }
Esempio n. 13
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, methods: "get", Route = "result/{instanceId}")]
            HttpRequest req,
            [DurableClient] IDurableOrchestrationClient client,
            string instanceId,
            ILogger log)
        {
            var status = await client.GetStatusAsync(instanceId);

            if (status.RuntimeStatus == OrchestrationRuntimeStatus.Completed)
            {
                return(new OkObjectResult(status.Output));
            }
            else if (status.RuntimeStatus == OrchestrationRuntimeStatus.Running)
            {
                string checkStatusLocation = $"{req.Scheme}://{req.Host}/api/result/{instanceId}";
                string message             = $"Your submission is being processed. The current status is {client.GetStatusAsync().Status}. To check the status later, go to: GET {checkStatusLocation}";

                ActionResult response = new AcceptedResult(checkStatusLocation, message); // The GET status location is returned as an http header
                return(response);
            }
            else
            {
                return(new BadRequestObjectResult(status.RuntimeStatus.ToString()));
            }
        }
Esempio n. 14
0
        public void Constructor_InitializesStatusCodeAndValue(object value)
        {
            // Arrange & Act
            var result = new AcceptedResult("testlocation", value);

            // Assert
            Assert.Equal(StatusCodes.Status202Accepted, result.StatusCode);
            Assert.Same(value, result.Value);
        }
Esempio n. 15
0
        public void ValueAs_Null_ShouldFail()
        {
            ActionResult result         = new AcceptedResult(TestUri, null);
            var          failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundNull(
                "AcceptedResult.Value", typeof(object));

            Action a = () => result.Should().BeAcceptedResult().ValueAs <object>();

            a.Should().Throw <Exception>().WithMessage(failureMessage);
        }
Esempio n. 16
0
        public async Task RetryAfterIsNotSetWhenNoTimeSpanIsProvided()
        {
            var controller = new DummyController
            {
                Configuration = new HttpConfiguration(),
                Request       = new HttpRequestMessage()
            };

            var actionResult = new AcceptedResult <DummyResponse>(controller, new DummyResponse());
            var response     = await actionResult.ExecuteAsync(new CancellationToken());

            response.Content.Headers.Should().NotContain("Retry-After", "because the response should not specify the Retry-After.");
        }
Esempio n. 17
0
        public async Task RetryAfterIsNotSetForTimeSpanZero()
        {
            var controller = new DummyController
            {
                Configuration = new HttpConfiguration(),
                Request       = new HttpRequestMessage()
            };

            var actionResult = new AcceptedResult <DummyResponse>(controller, new DummyResponse(), TimeSpan.Zero);
            var response     = await actionResult.ExecuteAsync(new CancellationToken());

            response.Headers.RetryAfter.Should().BeNull("because the response should not specify the Retry-After.");
        }
Esempio n. 18
0
        public async void HttpStatusCodeIsCorrect()
        {
            var controller = new DummyController
            {
                Configuration = new HttpConfiguration(),
                Request       = new HttpRequestMessage()
            };

            var actionResult = new AcceptedResult <DummyResponse>(controller, new DummyResponse());
            var response     = await actionResult.ExecuteAsync(new CancellationToken());

            response.StatusCode.Should().Be(HttpStatusCode.Accepted, "because the result should set the provided status code");
        }
Esempio n. 19
0
    public async Task ExecuteResultAsync_SetsStatusCodeAndLocationHeader()
    {
        // Arrange
        var expectedUrl = "testAction";
        var httpContext = GetHttpContext();

        // Act
        var result = new AcceptedResult(expectedUrl, value: "some-value");
        await result.ExecuteAsync(httpContext);

        // Assert
        Assert.Equal(StatusCodes.Status202Accepted, httpContext.Response.StatusCode);
        Assert.Equal(expectedUrl, httpContext.Response.Headers["Location"]);
    }
Esempio n. 20
0
        public async Task <IActionResult> Post([FromBody] CreateCustomerModel model)
        {
            var customerId = Guid.NewGuid().ToString();
            await bus.EnqueueAsync(new CreateCustomerFromApiCommand()
            {
                DomainObjectId = customerId, //Mandatory Id
                Name           = model.Name
            });

            var acceptedResult = new AcceptedResult();

            acceptedResult.Location = new Uri($"/api/customers/{customerId}", UriKind.Relative).ToString();

            return(acceptedResult);
        }
Esempio n. 21
0
        public async Task RetryAfterIsSetOnResponse()
        {
            var controller = new DummyController
            {
                Configuration = new HttpConfiguration(),
                Request       = new HttpRequestMessage()
            };

            var retrySeconds = TimeSpan.FromSeconds(30);
            var actionResult = new AcceptedResult <DummyResponse>(controller, new DummyResponse(), retrySeconds);
            var response     = await actionResult.ExecuteAsync(new CancellationToken());

            response.Headers.RetryAfter.Should().NotBeNull("Retry-After", "because the response should specify the Retry-After.");
            response.Headers.RetryAfter.Delta.Should().Be(retrySeconds, "because the duration should match the provided TimeSpan");
        }
Esempio n. 22
0
        public void Points_Delete_StatusCode_202(int status)
        {
            PointsController controller = new PointsController(_pointRepository);

            Point point = new Point()
            {
                Name = "K", PointId = 10
            };

            IActionResult result = controller.DeletePoint(point.PointId);

            AcceptedResult actionResult = result.Should().BeOfType <AcceptedResult>().Subject;

            actionResult.StatusCode.Should().Be(status, $"StatusCode should be {status}");
        }
Esempio n. 23
0
        public async Task ExecuteResultAsync_SetsStatusCodeAndLocationHeader()
        {
            // Arrange
            var location      = "/test/";
            var formatter     = CreateMockFormatter();
            var httpContext   = GetHttpContext(formatter);
            var actionContext = GetActionContext(httpContext);

            // Act
            var result = new AcceptedResult(location, "testInput");
            await result.ExecuteResultAsync(actionContext);

            // Assert
            Assert.Equal(StatusCodes.Status202Accepted, httpContext.Response.StatusCode);
            Assert.Equal(location, httpContext.Response.Headers["Location"]);
        }
Esempio n. 24
0
        public static async Task <IActionResult> HttpStart(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req,
            [DurableClient] IDurableOrchestrationClient starter, ILogger log)
        {
            string instanceId = await starter.StartNewAsync("seasonelpromotion", null);

            log.LogInformation($"Started orchestration with ID = '{instanceId}'.");

            string checkStatusLocacion = string.Format("{0}://{1}/api/status/{2}", req.Scheme, req.Host, instanceId);
            string message             = $"Status update of the promotional items : {checkStatusLocacion}";

            ActionResult response = new AcceptedResult(checkStatusLocacion, message);

            req.HttpContext.Response.Headers.Add("retry-after", "20");
            return(response);
        }
Esempio n. 25
0
    public async Task ExecuteResultAsync_FormatsData()
    {
        // Arrange
        var httpContext = GetHttpContext();
        var stream      = new MemoryStream();

        httpContext.Response.Body = stream;
        // Act
        var result = new AcceptedResult("my-location", value: "Hello world");
        await result.ExecuteAsync(httpContext);

        // Assert
        var response = Encoding.UTF8.GetString(stream.ToArray());

        Assert.Equal("\"Hello world\"", response);
    }
Esempio n. 26
0
        public async Task <IActionResult> Post([FromBody] CreateCustomerModel model)
        {
            var customerId = Guid.NewGuid().ToString();

            //The bus will call the customer domain object
            await bus.EnqueueAsync(new CreateCustomerFromApiCommand()
            {
                DomainObjectId = customerId, //Mandatory Id
                Name           = model.Name
            });

            var acceptedResult = new AcceptedResult
            {
                //Give The Client a hint where to get the details( see below).
                Location = new Uri($"/api/customers/{customerId}", UriKind.Relative).ToString()
            };

            return(acceptedResult);
        }
Esempio n. 27
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "submit")] HttpRequest req,
            [DurableClient] IDurableOrchestrationClient starter,
            ILogger log)
        {
            string payload = req.Body.ToString();

            string instanceId = await starter.StartNewAsync("RunOrchestrator", null);

            log.LogInformation($"Started orchestration with ID = '{instanceId}'.");

            string checkStatusLocation = $"{req.Scheme}://{req.Host}/api/result/{instanceId}";
            string message             = $"Your submission is being processed. The current status is {starter.GetStatusAsync().Status}. To check the status later, go to: GET {checkStatusLocation}";

            ActionResult response = new AcceptedResult(checkStatusLocation, message); // The GET status location is returned as an http header

            req.HttpContext.Response.Headers.Add("retry-after", "20");                // To inform the client how long to wait before checking the status.
            return(response);
        }
Esempio n. 28
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, methods: "get", Route = "status/{instanceId}")] HttpRequest req,
            [OrchestrationClient] DurableOrchestrationClient orchestrationClient,
            string instanceId,
            ILogger logger)
        {
            // Get the built-in status of the orchestration instance. This status is managed by the Durable Functions Extension.
            var status = await orchestrationClient.GetStatusAsync(instanceId);

            if (status != null)
            {
                // Get the custom status of the orchestration intance. This status is set by our code.
                // This can be any serialisable object. In this case, just a string.
                string customStatus = (string)status.CustomStatus;
                if (status.RuntimeStatus == OrchestrationRuntimeStatus.Running || status.RuntimeStatus == OrchestrationRuntimeStatus.Pending)
                {
                    //The URL (location header) is prepared so the client know where to get the status later.
                    string checkStatusLocacion = string.Format("{0}://{1}/api/status/{2}", req.Scheme, req.Host, instanceId);
                    string message             = $"Your submission is being processed. The current status is {customStatus}. To check the status later, go to: GET {checkStatusLocacion}"; // To inform the client where to check the status

                    // Create an Http Response with Status Accepted (202) to let the client know that the original request hasn't yet been fully processed.
                    ActionResult response = new AcceptedResult(checkStatusLocacion, message); // The GET status location is returned as an http header
                    req.HttpContext.Response.Headers.Add("retry-after", "20");                // To inform the client how long to wait before checking the status.
                    return(response);
                }
                else if (status.RuntimeStatus == OrchestrationRuntimeStatus.Completed)
                {
                    // Once the orchestration has been completed, an Http Response with Status OK (200) is created to inform the client that the original request has been fully processed.
                    if (customStatus == "Approved")
                    {
                        return(new OkObjectResult($"Congratulations, your presentation with id '{instanceId}' has been accepted!"));
                    }
                    else
                    {
                        return(new OkObjectResult($"We are sorry! Unfortunately your presentation with id '{instanceId}' has not been accepted."));
                    }
                }
            }
            // If status is null, then instance has not been found. Create and return an Http Response with status NotFound (404).
            return(new NotFoundObjectResult($"Whoops! Something went wrong. Please check if your submission Id is correct. Submission '{instanceId}' not found."));
        }
Esempio n. 29
0
        public async Task ExecuteResultAsync_SetsObjectValueOfFormatter(object value)
        {
            // Arrange
            var    location    = "/test/";
            var    formatter   = CreateMockFormatter();
            var    httpContext = GetHttpContext(formatter);
            object actual      = null;

            formatter.Setup(f => f.WriteAsync(It.IsAny <OutputFormatterWriteContext>()))
            .Callback((OutputFormatterWriteContext context) => actual = context.Object)
            .Returns(Task.FromResult(0));

            var actionContext = GetActionContext(httpContext);

            // Act
            var result = new AcceptedResult(location, value);
            await result.ExecuteResultAsync(actionContext);

            // Assert
            Assert.Same(value, actual);
        }
Esempio n. 30
0
        public async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = "actions/run")] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            var body    = default(string);
            var payload = default(EventRequest);

            using (var reader = new StreamReader(req.Body))
            {
                body = await reader.ReadToEndAsync();

                payload = JsonConvert.DeserializeObject <EventRequest>(body);
            }

            req.HttpContext.Response.Headers.Add("CARD-ACTION-STATUS", $"Deployment process for {payload.ClientPayload.Artifact.Name} has been resumed.");

            using (var content = new StringContent(body))
            {
                var authKey    = this._settings.GitHub.AuthKey;
                var endpoint   = string.Format(this._settings.GitHub.Endpoints.Dispatches.TrimStart('/'), payload.ClientPayload.Repository.Owner, payload.ClientPayload.Repository.Name);
                var requestUri = new Uri($"{this._settings.GitHub.BaseUri.TrimEnd('/')}/{endpoint}");
                var accept     = this._settings.GitHub.Headers.Accept;
                var userAgent  = this._settings.GitHub.Headers.UserAgent;

                this._client.DefaultRequestHeaders.Clear();
                this._client.DefaultRequestHeaders.Add("Authorization", authKey);
                this._client.DefaultRequestHeaders.Add("Accept", accept);
                this._client.DefaultRequestHeaders.Add("User-Agent", userAgent);
                using (var response = await this._client.PostAsync(requestUri, content).ConfigureAwait(false))
                {
                    response.EnsureSuccessStatusCode();
                }
            }

            var result = new AcceptedResult(new Uri($"https://github.com/{payload.ClientPayload.Repository.Owner}/{payload.ClientPayload.Repository.Name}/actions"), body);

            return(result);
        }