Example #1
0
        public async Task <IActionResult> BatchLookup(BatchLookupViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            if (string.IsNullOrWhiteSpace(model.AddressData))
            {
                ModelState.AddModelError(nameof(model.AddressData),
                                         "You must provide a line separated list of addresses. IP or DNS is acceptable.");
                return(View(model));
            }

            List <string> addresses;

            try
            {
                addresses = model.AddressData.Split(Environment.NewLine).ToList();
            }
            catch
            {
                ModelState.AddModelError(nameof(model.AddressData), "Invalid data, you must provide a line separated list of addresses. IP or DNS is acceptable.");
                return(View(model));
            }

            if (addresses.Count >= 20)
            {
                ModelState.AddModelError(nameof(model.AddressData),
                                         "You can only search for a maximum of 20 addresses in one request");
                return(View(model));
            }

            try
            {
                model.LookupAddressBatchResponse = await _geoLocationClient.LookupAddressBatch(addresses);

                if (!model.LookupAddressBatchResponse.Success)
                {
                    ModelState.AddModelError(nameof(model.AddressData), model.LookupAddressBatchResponse.ErrorMessage);
                    return(View(model));
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error retrieving geo-location data for {addressData}", model.AddressData);
                return(Error());
            }

            return(View(model));
        }