public async Task <PostCommentResult> PostCommentAsync(IFormCollection form) { if (form is null) { throw new ArgumentNullException(nameof(form)); } // Make sure the site posting the comment is the correct site. var allowedSite = _config.Website; var postedSite = form[FormFields.CommentSite]; if (!string.IsNullOrWhiteSpace(allowedSite) && !AreSameSites(allowedSite, postedSite)) { return(new PostCommentResult( HttpStatusCode.BadRequest, string.Format( CultureInfo.InvariantCulture, CommentResources.AreNotSameSitesErrorMessage, postedSite.ToString() ?? "null"))); } var commentResult = await _commentFactory.CreateFromFormAsync(form).ConfigureAwait(false); if (commentResult.HasErrors) { return(new PostCommentResult( HttpStatusCode.BadRequest, $"Creating comment from form failed: {string.Join("\n", commentResult.Errors)}", commentResult.Exception)); } var pullRequestResult = await _pullRequestService.TryCreatePullRequestAsync(commentResult.Comment) .ConfigureAwait(false); if (pullRequestResult.HasError) { return(new PostCommentResult( HttpStatusCode.BadRequest, $"Creating pull request failed: {pullRequestResult.Error}", pullRequestResult.Exception)); } if (!Uri.TryCreate(form[FormFields.Redirect], UriKind.Absolute, out var redirectUri)) { return(new PostCommentResult(HttpStatusCode.OK)); } else { return(new PostCommentResult(HttpStatusCode.Redirect, redirectUri)); } }