I Had sped lots of time to resolve a issue. I am Calling a 3rd party API like
http://abc/app.aspx?deFleetLastName=MyName&Test123&deFleetFirstName=ààÃÅjeetaSisodiààÃÅ
In above url I want to allow & between a word like MyName&Test123. Also I want to allow Spanish characters like ààÃÅjeetaSisodiààÃÅ
I am using below code to allow Spanish characters and its working fine.
AuthRequest = "&deTCIVRAccountNumber=" + SecCardReq.AdminNumber;
AuthRequest += "&deCISSTitle=" + SecCardReq.Title;
AuthRequest += "&deTCIVRCardHolderIdentFirstName=" + SecCardReq.FirstName;
AuthRequest += "&deTCIVRCardHolderIdentMiddleName=" + SecCardReq.MiddleName;
AuthRequest += "&deTCIVRCardHolderIdentLastName=" + SecCardReq.LastName;
AuthRequest += "&deCISSSecLastName=" + SecCardReq.SecLastName;
AuthRequest += "&deCISSNameOnCard=" + SecCardReq.NameOnCard;
AuthRequest += "&deTCIVRCardHolderIdentAddressLine1=" + SecCardReq.AddressLine1;
AuthRequest += "&deTCIVRCardHolderIdentAddressLine2=" + SecCardReq.AddressLine2;
AuthRequest += "&deTCIVRCardRegistrationCity=" + SecCardReq.City;
AuthRequest += "&deTCIVRCardHolderIdentificationStateProvince=" + SecCardReq.State;
AuthRequest += "&deTCIVRCardRegistrationPostalCode=" + SecCardReq.PostalCode;
AuthRequest += "&deTCIVRCardRegistrationCountry=" + SecCardReq.Country;
AuthRequest += "&deTCIVRCardRegistrationEmail=" + SecCardReq.Email;
AuthRequest += "&deCISSEmail2=" + SecCardReq.Email2;
AuthRequest += "&deTCIVRCardHolderIdentDOB=" + SecCardReq.DOB;
AuthRequest += "&deCISSMotherMaidenName=" + SecCardReq.MotherMaidenName;
AuthRequest += "&deTCIVRCardHolderIdentificationIdCode=" + SecCardReq.IdType;
AuthRequest += "&deCIAOtherIDDescription=" + SecCardReq.IDDescription;
AuthRequest += "&deTCIVRCardHolderIdentificationIdNumber=" + SecCardReq.IdNumber;
AuthRequest += "&deCIAIDIssueDate=" + Convert.ToString(SecCardReq.IDIssueDate);
AuthRequest += "&deCIAIDExpirationDate=" + Convert.ToString(SecCardReq.IDExpirationDate);
AuthRequest += "&deCIASIssuedBy=" + SecCardReq.IDIssuedBy;
AuthRequest += "&deCIAIDIssueState=" + SecCardReq.IDIssueState;
AuthRequest += "&deSecondaryCardTypeForAPI=" + SecCardReq.SecondaryCardTypeForAPI;
AuthRequest += "&deCIASHomePhoneCCode=" + SecCardReq.HomePhoneCountryCode;
AuthRequest += "&deTCIVRCardRegistrationPhone=" + SecCardReq.HomePhoneNumber;
AuthRequest += "&deCIASOfficePhoneCCode=" + SecCardReq.WorkPhoneCountryCode;
AuthRequest += "&deCISSWorkPhoneNumber=" + SecCardReq.WorkPhoneNumber;
AuthRequest += "&deCIASOfficePhoneExt=" + SecCardReq.WorkPhoneExt;
AuthRequest += "&deMobilePhCCode=" + SecCardReq.MobilePhoneNumberCCode;
AuthRequest += "&deCISSMobilePhoneNumber=" + SecCardReq.MobilePhoneNumber;
AuthRequest += "&deFaxNumberCCode=" + SecCardReq.HomeFaxNumberCCode;
AuthRequest += "&deCISSHomeFaxNumber=" + SecCardReq.HomeFaxNumber;
AuthRequest += "&deWorkFaxNumberCCode=" + SecCardReq.WorkFaxNumberCCode;
AuthRequest += "&deCISSWorkFaxNumber=" + SecCardReq.WorkFaxNumber;
AuthRequest += "&deCISSLanguageIndicator=" + SecCardReq.LanguageIndicator;
AuthRequest += "&deSecondaryCardPinAPI=" + SecCardReq.SecondaryCardPin;
AuthRequest += "&deSecondaryCardDealerNumberForAPI=" + SecCardReq.SecondaryCardDealerNumber;
AuthRequest += "&deIVREmbossingHotStamp=" + SecCardReq.EmbossingHotStamp;
AuthRequest += "&deSecondaryCardPrivacy=" + SecCardReq.SecondaryCardPrivacy;
AuthRequest += "&dePPCIPNumber=" + SecCardReq.PPCIPNumber;
AuthRequest += "&deIVREmbossingLine4=" + SecCardReq.EmbossingLine4;
AuthRequest += "&dePPCIPType=" + SecCardReq.PPCIPType;
AuthRequest += "&dePDDeliveryMechanism=" + SecCardReq.DeliveryMechanism;
AuthRequest += "&dePPCIPStatus=" + SecCardReq.PPCIPStatus;
AuthRequest += "&deSecondaryCardExpOptForAPI=" + (SecCardReq.SecondaryCardExpOpt != null ? SecCardReq.SecondaryCardExpOpt : "");
AuthRequest += "&deSecondaryVCExpAfrTxnEntryAPI=" + SecCardReq.SecondaryVCExpAfrTxnEntry ?? "";
AuthRequest += "&deSecondaryVCExprAfrDaysEntryAPI=" + SecCardReq.SecondaryVCExprAfrDaysEntry ?? "";
AuthRequest += "&deSecondaryVCExprAfrDaysEntryDuration=" + SecCardReq.SecondaryVCExprAfrDaysEntryDuration ?? "";
AuthRequest += "&deSecondaryVCExpOnDate=" + (SecCardReq.SecondaryVCExpOnDate != null ? SecCardReq.SecondaryVCExpOnDate : "");
AuthRequest += "&deSecondaryVirtualCardLimit=" + SecCardReq.SecondaryVirtualCardLimit;
AuthRequest += "&deSecondaryVirtualCardResetAllowedForAPI=" + "0"; // As per new changes in SCP
AuthRequest += "&deCardValidFromDateAPI=" + SecCardReq.StartDate; // As per new changes in SCP
AuthRequest += "&deCardValidTillDateAPI=" + SecCardReq.StopDate; // As per new changes in SCP
AuthRequest += "&deBookingRefNumber=" + SecCardReq.BookingRefNumber; // As per new changes in SCP
AuthRequest += "&dePPSSN=" + SecCardReq.DecryptedSSN;
AuthRequest += "&deIVRSource=" + PortalCommon.PlateFormName;
AuthRequest += "&deMakerCheckerJobID=" + SecCardReq.jobID;
AuthRequest += "&deMakerCheckerFlag=" + SecCardReq.makerCheckerFlag;
AuthRequest += "&deExistingCustomerId=" + SecCardReq.CustomerId;
AuthRequest += "&deBankingCustomerIdAPI=" + SecCardReq.BankingCustomerId;
//IDS CIBANCO CHANGES
AuthRequest += "&dePoBCountry=" + SecCardReq.POBCountry;
AuthRequest += "&dePoBState=" + SecCardReq.POBStateProvince;
AuthRequest += "&dePoBCity=" + SecCardReq.POBCity;
AuthRequest += "&deNationality=" + SecCardReq.Nationality;
AuthRequest += "&deSACCode=" + SecCardReq.SACActivationCode;
AuthRequest += "&deCHCustomerIdDetailMsg=" + SecCardReq.IDDetails;
HttpRequestMsg = "User=" + (Convert.ToString(UserLogin));
HttpRequestMsg += "&Password=" + HttpUtility.UrlEncode(Convert.ToString(UserPassword));
HttpRequestMsg += "&Application=appCardinal";
HttpRequestMsg += "&dbbServiceName=svcIVRSecondaryCard";
HttpRequestMsg += "&dbbSystemExtLogin=1";
HttpRequestMsg += "&deDBBServiceApiLevel=1.2";
HttpRequestMsg += AuthRequest;
HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(BaseUrl);
httpRequest.Method = "POST"; httpRequest.Headers.Add("X-Forwarded-For", objLoginUserInfo.HostIp); httpRequest.Headers.Add("Authorization", AddAuthorizationHeader());
httpRequest.ContentType = "application/x-www-form-urlencoded";
httpRequest.CookieContainer = new CookieContainer();
string sOutput = string.Empty;
sOutput = CommonBLL.GetDBBIDServiceResponse(httpRequest, HttpRequestMsg);
public static string GetDBBIDServiceResponse(HttpWebRequest httpRequest, string httpRequestMsg)
{
string responseString = string.Empty;
try
{
Utilities.APITraceEnable(httpRequestMsg);
byte[] byteArray = Encoding.GetEncoding(1252).GetBytes(httpRequestMsg);
httpRequest.ContentLength = byteArray.Length;
Stream newStream = httpRequest.GetRequestStream(); //open connection
newStream.Write(byteArray, 0, byteArray.Length); // Send the data.
newStream.Close();
HttpWebResponse getResponse = (HttpWebResponse)httpRequest.GetResponse();
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
responseString = sr.ReadToEnd();
}
}
catch (Exception ex)
{
CreateLogFile.CreateActivityLog("CommonBLL GetEncodingWindows1252 Exception =============== " + ex.Message, ex.StackTrace);
}
return responseString;
}
Problem occurs when user enter & char. To allow & we can use HttpUtility.UrlEncode , but I don't want to use HttpUtility.Urlencode
Please suggest me how can allow & and Spanish characters in above API calling
You can use %26 to replace the & symbol within your query variables. It counts as the same (a bit like how %20 is the equivalent to a space). Parse your variables and replace the & with the above code and you should be set.
For example, you could write MyName%26Test123 which would be the same as MyName&Test123
See http://www.degraeve.com/reference/urlencoding.php as a reference to the different codes used to replace characters
Update
Based on what I can see from your API construction, you can sort this out pretty easily. All your data is stored in a single class, so cycle through each property using the following
public void ParseAmpersand()
{
foreach (PropertyInfo pi in this.GetType().GetProperties())
{
if (pi.PropertyType == typeof(string)
{
((string)pi.GetValue(this)).Replace("&", "%26");
}
}
}
This will cycle through all properties in that object that are of type string and replace the & with the %26 code. All you need to do is place this into the class you already created (SecCardReq) and call it before you build your API string.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With