public async Task <USPSVerifyPayload> VerifyAddressAsync(VerifyAddressInput address)
        {
            var serializer = new XmlSerializer(typeof(AddressValidateResponse));
            var client     = new HttpClient();

            //TODO: Can you serialize this instead of interpolating it?
            var body = new Dictionary <string, string>
            {
                { "API", "Verify" },
                { "XML", $@"<AddressValidateRequest USERID = ""{userName}""><Address ID = ""0""><Address1>{address.Line2}</Address1><Address2>{address.Line1}</Address2><City>{address.City}</City><State>{address.State}</State><Zip5>{address.PostalCode}</Zip5><Zip4></Zip4></Address></AddressValidateRequest>" }
            };


            var content = new FormUrlEncodedContent(body.AsEnumerable() !);

            var response = await client.PostAsync(URIBASE, content);

            AddressValidateResponse addressSerial = new AddressValidateResponse();

            try
            {
                var stream = await response.EnsureSuccessStatusCode().Content.ReadAsStreamAsync();

                addressSerial = (AddressValidateResponse)serializer.Deserialize(stream) !;
                //ValdationMessage is null when address is fully successful but if more info is needed, it has a value
                //addressSerial.Address.ValidationMessage = $"Status Code: {response.StatusCode} | Reason Phrase: {response.ReasonPhrase} ";
                return(addressSerial.Address !);
            }

            catch (HttpRequestException)
            {
                return(new USPSVerifyPayload()
                {
                    ReturnText = $"{addressSerial.Address.ReturnText ?? "Could not validate address at this time"}"
                });
            }
        }
예제 #2
0
 public async Task <VerifyAddressPayload> VerifyAddress([Service] IAddressVerificationService service, VerifyAddressInput address)
 {
     return(new VerifyAddressPayload(await service.VerifyAddressAsync(address)));
 }