How to resolve & between a word in url with Spanish characters without url encoding

I spent a lot of time solving the problem. I call a third-party API like

http: //abc/app.aspx? deFleetLastName = MyName & Test123 & deFleetFirstName = ààÃØjeetaSisodiààÃÅ

In the above url, I want to allow and between the word, like MyName & Test123. I also want to allow Spanish characters such as ààÃØjeetaSisodiààÃÅ

I use the code below to allow Spanish characters and work 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; } 

The problem occurs when user login and char. To allow and use HttpUtility.UrlEncode, but I do not want to use HttpUtility.Urlencode

Please suggest me how to allow both Spanish characters in the above API

+5
source share
1 answer

You can use% 26 to replace and character in your query variables. It is considered the same thing (a bit like% 20 is equivalent to a space). Parse your variables and replace them with the code above and you should be set.

For example, you can write MyName%26Test123 , which will 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 see from your API construct, you can easily sort it. All your data is stored in one class, so check each property cyclically 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 loop through all the properties of this object that are of type string and replace the code and code% 26. All you need to do is put this in the class you already created ( SecCardReq ) and call it before you build an API string.

+3
source

Source: https://habr.com/ru/post/1263715/


All Articles