public async Task<IActionResult> Add(AddCarsViewModel addCarsViewModel) { userID = HttpContext.Session.GetInt32("userID") ?? 0; if (ModelState.IsValid) { if (AddCarLongViewModel.Make == null) // Pull the car information using API { // Vin API: https://github.com/writelinez/NHTSA-VehicleData NHTSAClient nhtsaClient = new NHTSAClient(); VehicleDataResponse<VinDecodeResult> vinResult = await nhtsaClient.DecodeVinAsync(addCarsViewModel.VinNumber); VinDecodeResult VinAPIResult = vinResult.Results.FirstOrDefault(); if (VinAPIResult != null) { Car car = new Car(); car.Make = VinAPIResult.Make; car.Model = VinAPIResult.Model; car.CurrentMiles = addCarsViewModel.CurrentMiles; car.UserID = userID; car.NextMaintenanceDays = 0; car.NextMaintenanceMiles = 0; car.VinNumber = addCarsViewModel.VinNumber; car.Year = Int32.Parse(VinAPIResult.ModelYear); context.Cars.Add(car); context.SaveChanges(); return Redirect("/Cars/Index/" + car.ID); } else { // use the information from the user Car car = context.Cars.Where(x => x.ID == addCarsViewModel.CarID).FirstOrDefault(); car.ID = addCarsViewModel.CarID; car.Make = addCarsViewModel.Make; car.Model = addCarsViewModel.Model; car.CurrentMiles = addCarsViewModel.CurrentMiles; car.NextMaintenanceDays = addCarsViewModel.NextMaintenanceDays; car.NextMaintenanceMiles = addCarsViewModel.NextMaintenanceMiles; car.VinNumber = addCarsViewModel.VinNumber; car.Year = addCarsViewModel.Year; context.SaveChanges(); return Redirect("/Home/MainPage"); } } } return View(addCarsViewModel); }
static void Main(string[] args) { NHTSAClient client = new NHTSAClient(); Art.PrintApplicationTitle(); Art.PrintTableRow(80, "Commands", "Parameters", "Example"); foreach (var commandInfos in GetCommandInfos()) { Art.PrintTableRow(80, commandInfos); } while (!canExit) { Console.WriteLine("Enter Command."); string input = Console.ReadLine(); Console.WriteLine("Executing Command..."); ExecuteCommand(input, client); Console.WriteLine("Complete."); } }
static void ExecuteCommand(string input, NHTSAClient client) { string[] inputArray = input.Split(' '); string command = string.Empty; List <KeyValuePair <string, string> > commandParameters = new List <KeyValuePair <string, string> >(); //parse command from input command = inputArray.ElementAtOrDefault(0); if (string.IsNullOrEmpty(command)) { Art.PrintError("Invalid or missing command"); return; } //parse command parameters if (inputArray.Length > 1) { foreach (var item in inputArray.Skip(1)) { string[] paramsArray = item.Split('='); commandParameters.Add(new KeyValuePair <string, string>(paramsArray.ElementAtOrDefault(0), paramsArray.ElementAtOrDefault(1))); } } Type clientType = typeof(NHTSAClient); MethodInfo mi = clientType.GetMethods() .FirstOrDefault(t => t.GetCustomAttribute <FunctionInfoAttribute>() != null && t.GetCustomAttribute <FunctionInfoAttribute>().Name.Equals(command)); if (mi == null) { Art.PrintError($"{command} is an invalid command"); } ParameterInfo[] pInfos = mi.GetParameters(); //Only supports string parameters at current. Dont think i will need anything else here. object[] funcParameters = new object[pInfos.Length]; int fIndex = 0; foreach (var item in pInfos) { var cParam = commandParameters.Where(t => t.Key.Equals(item.Name, StringComparison.CurrentCultureIgnoreCase)); if (cParam.Count() == 1) { funcParameters[fIndex] = ParameterConverter.Convert(cParam.Single().Value, item.ParameterType); fIndex++; } } var result = mi.Invoke(client, funcParameters); if (result != null) { string jsonResult = JsonConvert.SerializeObject(result, Formatting.Indented); Console.BackgroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.DarkGray; Console.WriteLine(jsonResult); Console.ResetColor(); } }