public virtual async Task<ActionResult> Delete(DeletePackagesRequest deletePackagesRequest) { var packagesToDelete = new List<Package>(); if (ModelState.IsValid) { // Get the packages to delete foreach (var package in deletePackagesRequest.Packages) { var split = package.Split(new[] {'|'}, StringSplitOptions.RemoveEmptyEntries); if (split.Length == 2) { var packageToDelete = _packageService.FindPackageByIdAndVersion(split[0], split[1], allowPrerelease: true); if (packageToDelete != null) { packagesToDelete.Add(packageToDelete); } } } // Perform delete if (deletePackagesRequest.SoftDelete) { await _packageDeleteService.SoftDeletePackagesAsync( packagesToDelete, GetCurrentUser(), EnumHelper.GetDescription(deletePackagesRequest.Reason.Value), deletePackagesRequest.Signature); } else { await _packageDeleteService.HardDeletePackagesAsync( packagesToDelete, GetCurrentUser(), EnumHelper.GetDescription(deletePackagesRequest.Reason.Value), deletePackagesRequest.Signature, deletePackagesRequest.DeleteEmptyPackageRegistration); } // Redirect out TempData["Message"] = "We're performing the package delete right now. It may take a while for this change to propagate through our system."; return Redirect("/"); } if (!deletePackagesRequest.Packages.Any()) { return HttpNotFound(); } var firstPackage = packagesToDelete.First(); return Delete(firstPackage.PackageRegistration.Id, firstPackage.Version); }