2017-02-02 107 views
5

問題を解決するために多くの時間が必要でした。私はMYNAME & Test123のような単語の間&を許可する上記のURLでURLの単語とURLの間にURLをエンコードしないスペイン語の文字を使用する方法

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

のようなサードパーティのAPIを呼び出しています。 また、ààÅÅeetaSisodiààÅÅのようなスペイン語の文字を許可したい

私は以下のコードを使用してスペイン語の文字とその正常な動作を許可しています。

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

ユーザーが& charと入力したときに問題が発生します。あなたがに%26を使用することができます

+0

HttpUtility.Urlencodeを使用しない理由は何ですか? – Seano666

+0

@ Seano666はい、HttpUtility.Urlencodeもスペイン語をエンコードします。 – Jaihind

+0

解決策よりも回避策に似ていますが、「&」を「and」に置き換えることもできます。 – Ignas

答えて

3

を呼び出す上記のAPIに&とスペイン語の文字を許可することができますどのように私を提案してください我々はHttpUtility.UrlEncodeを使用することができます&できるようにするために、私は

にHttpUtility.Urlencodeを使用したくない クエリ変数内の&シンボルを置き換えます。それは同じものとみなされます(%20がスペースに相当するようなビットです)。変数を解析し、&を上記のコードに置き換えると、設定する必要があります。

たとえば、あなたはMyName&Test123

は文字

を置き換えるために使用される種々のコードへの参照としてhttp://www.degraeve.com/reference/urlencoding.phpを参照してくださいと同じになりますどのMyName%26Test123を書くことができ更新何Iに基づいて

あなたのAPI構築から見ることができます、あなたはこれをかなり簡単に並べ替えることができます。すべてのデータは、単一のクラスに格納されるので、各プロパティを循環型stringのものであり、26%のコードで&を置き換え、そのオブジェクトのすべてのプロパティを通じてこの意志サイクル以下

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

を使用します。必要な作業は、既に作成したクラス(SecCardReq)に配置し、API文字列を作成する前に呼び出すことだけです。

+0

ご回答いただきありがとうございます。私はすでにこのソリューションを試してみましたが、うまくいけば、プロジェクトには何千ものテキストボックスがあります。 – Jaihind

+0

私はすべてのコントロールに到達したくありません。 – Jaihind

+0

@Jaihindあなたはもう少し詳しく説明できますか?あなたの質問は、API呼び出しに送信される変数で置き換える必要があることを示唆しています。したがって、テキストボックス値ではなく、サブミットされている変数を解析します。 – Takarii

関連する問題