public async Task <HttpResponseData> Patch( [HttpTrigger(AuthorizationLevel.Anonymous, "patch", Route = "users/me")] HttpRequestData req) { // Verify authenticated user is present var subject = await authorize.TryGetSubject(req.Headers); if (subject == null) { return(req.CreateResponse(HttpStatusCode.Unauthorized)); } var(user, errorResponse) = await DeserializeAndValidateBody <UserPatchDto>(req); if (user == null) { return(errorResponse !); } var validationError = ValidateModel(user); if (validationError != null) { return(await CreateValidationError(req, validationError)); } var entity = await usersTable.GetSingle(subject); if (entity == null) { return(req.CreateResponse(HttpStatusCode.NotFound)); } if (user.PublicUrl == string.Empty) { user = user with { PublicUrl = null } } ; if (user.PublicTwitter == string.Empty) { user = user with { PublicTwitter = null } } ; var update = false; if (user.NickName != null && user.NickName != entity.NickName) { if (user.NickName.Length == 0) { return(await CreateValidationError(req, $"Nickname must not be empty.")); } entity.NickName = user.NickName; update = true; } if (user.Email != null && user.Email != entity.Email) { if (user.Email.Length == 0) { return(await CreateValidationError(req, $"Email must not be empty.")); } entity.Email = user.Email; update = true; } if (user.PublicTwitter != null && user.PublicTwitter != entity.PublicTwitter) { entity.PublicTwitter = user.PublicTwitter.Length == 0 ? null : user.PublicTwitter; update = true; } if (user.PublicUrl != null && user.PublicUrl != entity.PublicUrl) { entity.PublicUrl = user.PublicUrl.Length == 0 ? null : user.PublicUrl; update = true; } if (update) { await usersTable.Replace(entity); } return(await CreateResponse(req, mapper.Map <User, UserGetDto>(entity))); }