using Landmark.OLA.Models.Addresses; using System.Text; using System.Web; using System.Xml; using USPS.Configuration; namespace USPS.ApiCalls { public class AddressValidationRequestBuilder : IRequestBuildable { private readonly UspsSettings _settings; private readonly Address _address; public AddressValidationRequestBuilder(UspsSettings settings, Address address) { _settings = settings; _address = address; } public virtual string BuildAddressXML() { var sb = new StringBuilder(); var sw = new StringWriter(sb); var xml = new XmlTextWriter(sw); xml.WriteStartElement("AddressValidateRequest"); xml.WriteAttributeString("USERID", _settings.Username); xml.WriteStartElement("Address"); // USPS considers unit numbers (ex: APT 204) to be Address1. Our app's models would consider these to be Address2. DO NOT CHANGE xml.WriteElementString("Address1", _address.Address2); xml.WriteElementString("Address2", _address.Address1); xml.WriteElementString("City", _address.City); xml.WriteElementString("State", _address.State.ToString()); xml.WriteElementString("Zip5", _address.PostalCode); xml.WriteElementString("Zip4", ""); xml.WriteEndElement(); xml.WriteEndElement(); xml.Close(); var query = HttpUtility.ParseQueryString(string.Empty); query["API"] = "Verify"; query["XML"] = sb.ToString(); return query.ToString(); } public string BuildGET() { var xml = BuildAddressXML(); var message = _settings.EndpointUrl + xml; return message; } } }