public async Task <HttpResponseMessage> Join(int clusterId, [FromBody] JoinClusterRequest user) { try { if (user == null || String.IsNullOrWhiteSpace(user.UserEmail) || String.IsNullOrWhiteSpace(user.CaptchaResponse)) { return(this.Request.CreateResponse( HttpStatusCode.BadRequest, new BadRequestViewModel("MissingInput", messageResources.Manager.GetString("MissingInput"), "Missing input."))); } // validate captcha. bool captchaValid = await this.captcha.VerifyAsync(user.CaptchaResponse); if (!captchaValid) { return(this.Request.CreateResponse( HttpStatusCode.Forbidden, new BadRequestViewModel("InvalidCaptcha", messageResources.Manager.GetString("InvalidCaptcha"), "Invalid parameter: captcha"))); } ServiceUriBuilder builder = new ServiceUriBuilder("ClusterService"); IClusterService clusterService = ServiceProxy.Create <IClusterService>(builder.ToUri(), new ServicePartitionKey(1)); await clusterService.JoinClusterAsync(clusterId, user.UserEmail); return(this.Request.CreateResponse(HttpStatusCode.Accepted)); } catch (AggregateException ae) { ArgumentException argumentEx = ae.InnerException as ArgumentException; if (argumentEx != null) { return(this.Request.CreateResponse( HttpStatusCode.BadRequest, new BadRequestViewModel("InvalidEmail", messageResources.Manager.GetString("InvalidEmail"), argumentEx.Message))); } JoinClusterFailedException joinFailedEx = ae.InnerException as JoinClusterFailedException; if (joinFailedEx != null) { return(this.Request.CreateResponse( HttpStatusCode.BadRequest, new BadRequestViewModel( joinFailedEx.Reason.ToString(), messageResources.Manager.GetString(joinFailedEx.Reason.ToString()), joinFailedEx.Message))); } return(this.Request.CreateResponse( HttpStatusCode.InternalServerError, new BadRequestViewModel("ServerError", messageResources.Manager.GetString("ServerError"), ae.InnerException.Message))); } catch (Exception e) { return(this.Request.CreateResponse( HttpStatusCode.InternalServerError, new BadRequestViewModel("ServerError", messageResources.Manager.GetString("ServerError"), e.Message))); } }