public ActionResult Create(InfluencerFormViewModel viewModel, HttpPostedFileBase upload) { // BAD SCENARIO IF THE MODEL IS INVALID if (!ModelState.IsValid) { return(RedirectToAction("Create")); } // GET USER ID AND USER var userId = User.Identity.GetUserId(); var user = unitOfWork.ApplicationUserRepository.GetUser(userId); // BRING AURORA WALLET TO ALLOW THE USER PAY US var auroraWallet = unitOfWork.AuroraWalletRepository.GetAuroraWallet(); if (auroraWallet == null) { return(HttpNotFound()); } // THIS TRY CATCH CHECKS IF THE PAYMENT CAN BE DONE, AND IN GENERAL IF SOMETHING GOES WRONG try { //CREATE THE INFLUENCER var influencer = Influencer.CreateInflunecerWithPayment(viewModel, user, auroraWallet); //IF THERE IS NEW FILE UPLOADED if (upload != null && upload.ContentLength > 0) { //WE WILL CREATE A NEW FILE WITH THE TYPE OF AVATAR (THIS IS WHAT I NEED HERE) var avatar = FileUpload.GiveInfluencerAvatar(System.IO.Path.GetFileName(upload.FileName), upload.ContentType, null, FileType.Avatar, influencer.ID); //BLACK MAGIC using (var reader = new System.IO.BinaryReader(upload.InputStream)) { avatar.Content = reader.ReadBytes(upload.ContentLength); } // GIVE INFLUENCER THE LIST OF FILES WITH THE AVATAR FILE influencer.FileUploads = new List <FileUpload> { avatar }; } unitOfWork.InfluencerRepository.AddInfluencer(influencer); // SAVE CHANGES TO DB unitOfWork.Complete(); } catch (Exception) { // HERE YOU CAN ADD THE SAME PAGE WITH A NEW VIEW PROPERTY TO DISPLAY THAT THE PAYMENT COULDNT BE DONE return(RedirectToAction("Create")); } // REDIRECT TO ADD A GIG (USER EXPIRIENCE) return(RedirectToAction("Create", "Gig", null)); }