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"}" }); } }
public async Task <VerifyAddressPayload> VerifyAddress([Service] IAddressVerificationService service, VerifyAddressInput address) { return(new VerifyAddressPayload(await service.VerifyAddressAsync(address))); }