2017-02-02 11 views
5

Bir sorunu çözmek için çok zaman harcadım. Ben MyName & Test123 gibi bir kelime arasına & izin vermek istediğiniz yukarıdaki url olarakUrl'de bir kelime arasında, URL kodlama olmadan URL karakterleri arasına nasıl girilir ve izin verilir

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

gibi 3. parti API çağırma ediyorum. Ayrıca İspanyolca karakterleri ve onun iyi çalışmasına izin vermek için aşağıdaki kodu kullanıyorum: aaÃÅjeetaSisodiààÃÅ

İspanyolca karakterlere izin vermek istiyorum. Kullanıcı & kömürü girdiğinizde

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; 
    } 

Sorun oluşur. & biz HttpUtility.UrlEncode kullanabilirsiniz izin vermek için, ama nasıl

+0

HttpUtility.Urlencode kullanmak istemediğiniz herhangi bir sebep var mı? – Seano666

+0

@ Seano666 Evet, çünkü HttpUtility.Urlencode İspanyolca karakterini de kodlayın. – Jaihind

+0

Bir çözümden daha çok bir çözüm gibi, ancak "&" ile "ve" değiştirebilir misiniz? – Ignas

cevap

3

Sen için% 26 kullanabilirsiniz çağıran & ve yukarıdaki API İspanyol karakterleri izin verebilir HttpUtility.Urlencode

Lütfen beni öneririz kullanmak istemiyoruz Sorgu değişkenlerinizin içindeki & sembolünü değiştirin. Aynı olarak sayılır (yaklaşık% 20'nin bir boşluğa eşdeğer olması gibi). Değişkenlerinizi ayrıştırın ve &'u yukarıdaki kodla değiştirin ve ayarlamanız gerekir.

Örneğin

, sen

I öğrendiğine göre karakterleri

Güncelleme yerine kullanılan farklı kodlara referans olarak http://www.degraeve.com/reference/urlencoding.php Bkz MyName&Test123

aynı olacağını MyName%26Test123 yazabilirsiniz API yapınızdan görebileceğiniz gibi, bunu kolayca değiştirebilirsiniz. Her bir özellik vasıtasıyla çevrim tip string arasında ve% 26 koduyla & yerine o nesnenin tüm özellikler aracılığıyla aşağıdaki

public void ParseAmpersand() 
{ 
    foreach (PropertyInfo pi in this.GetType().GetProperties()) 
    { 
     if (pi.PropertyType == typeof(string) 
     { 
      ((string)pi.GetValue(this)).Replace("&", "%26"); 
     } 
    }    
} 

Bu olacak döngüsü kullanılarak böylece tüm veriler, tek bir sınıf saklanır. Tüm yapmanız gereken, bunu zaten oluşturduğunuz sınıfa yerleştirmektir (SecCardReq) ve API dizginizi oluşturmadan önce bunu çağırınız.

+0

teşekkürler. Bu çözümü çoktan denedim ve çalışma cezası sorunum, projemizde binlerce metin kutumuz var. – Jaihind

+0

Her kontrole ulaşmak istemiyorum. – Jaihind

+0

@Jaihind biraz daha ayrıntılı olarak açıklayabilir misiniz? Sorunuz, yalnızca API çağrısına gönderilen değişkenlerde değiştirmeniz gerektiğini göstermektedir. Bu nedenle, gönderilmekte olan değişkenleri ayrıştırın, – Takarii