2015-09-24 1 views
0

У меня есть один веб-сервис WCF. Я использую метод get для вставки данных. Поэтому я передаю все данные в URL, какВ пространствах веб-сервисов не разрешается при передаче данных по URL-адресу с использованием метода GET

[OperationContract] 
     [WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped, Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "Insert_drug_details?x_patient_id={x_patient_id}&drug_name={drug_name}&no_of_pills_given={no_of_pills_given}&no_of_pills_taken={no_of_pills_taken}&any_side_effect={any_side_effect}&date_of_pills_given={date_of_pills_given}&x_trimester={x_trimester}&x_visit_no={x_visit_no}")] 
     Stream Insert_drug_details(String x_patient_id, String drug_name, String no_of_pills_given, String no_of_pills_taken, String any_side_effect, String date_of_pills_given, String x_trimester, String x_visit_no); 

, но когда я прохожу значение с пространством автоматически заменить мое место на 20%, который неверные данные для вставки.

Итак, с моей точки зрения во время ввода я должен преобразовать значения из UTF-8 в nvarchar. Сторона Android все значения закодированы. Поэтому я просто расшифровываю значение.

Это мой метод вставки:

public Stream Insert_drug_details(String x_patient_id, String drug_name, String no_of_pills_given, String no_of_pills_taken 
      , String any_side_effect, String date_of_pills_given, String x_trimester, String x_visit_no) 
     { 
      int flag = 0; 
      String CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString; 
      using (MySqlConnection con = new MySqlConnection(CS)) 
      { 
       con.Open(); 
       String ResultDrugDetailsString; 
       MySqlCommand cmd = new MySqlCommand("sp_drug_details", con); 
       cmd.CommandType = CommandType.StoredProcedure; 
       cmd.Parameters.AddWithValue("x_patient_id", x_patient_id); 
       cmd.Parameters.AddWithValue("drug_name", drug_name); 
       cmd.Parameters.AddWithValue("no_of_pills_given", no_of_pills_given); 
       cmd.Parameters.AddWithValue("no_of_pills_taken", no_of_pills_taken); 
       cmd.Parameters.AddWithValue("any_side_effect", any_side_effect); 
       cmd.Parameters.AddWithValue("date_of_pills_given", date_of_pills_given); 
       cmd.Parameters.AddWithValue("x_trimester", x_trimester); 
       cmd.Parameters.AddWithValue("x_visit_no", x_visit_no); 
       flag = (int)cmd.ExecuteScalar(); 
       if (flag == 1 || flag == 2) 
       { 
        MySqlCommand cmd1 = new MySqlCommand("select id from drug_details where [email protected]_id and [email protected] and [email protected]_no", con); 
        cmd1.Parameters.AddWithValue("@patient_id", x_patient_id); 
        cmd1.Parameters.AddWithValue("@trimester", x_trimester); 
        cmd1.Parameters.AddWithValue("@visit_no", x_visit_no); 
        using (MySqlDataReader rdr = cmd1.ExecuteReader()) 
        { 
         List<Result_Drug_Details> DrugDetails = null; 
         while (rdr.Read()) 
         { 
          if (DrugDetails == null) 
          { 
           DrugDetails = new List<Result_Drug_Details>(); 
          } 
          Result_Drug_Details obj = new Result_Drug_Details(); 
          obj.id = rdr["id"].ToString(); 
          DrugDetails.Add(obj); 
         } 
         if (DrugDetails != null) 
         { 
          ResultDrugDetailsString = "{\"drug_details\":" + JsonConvert.SerializeObject(DrugDetails, Formatting.Indented) + ",\"isSuccess\":\"1\"}"; 
         } 
         else 
         { 
          ResultDrugDetailsString = "{\"isSuccess\":\"-1\"}"; 
         } 
         WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8"; 
         return new MemoryStream(Encoding.UTF8.GetBytes(ResultDrugDetailsString)); 
        } 
       } 
       else 
       { 
        ResultDrugDetailsString = "{\"isSuccess\":\"-1\"}"; 
        WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8"; 
        return new MemoryStream(Encoding.UTF8.GetBytes(ResultDrugDetailsString)); 
       } 
      } 
     } 

Есть ли другие возможные решения для этого ??? Как конвертировать UTF-8 в nvarchar ?? Или Как декодировать UTF-8 в nvarchar ??

+0

Попробуйте HttpServerUtility.UrlDecode: https://msdn.microsoft.com/en-us/library/6196h3wt%28v=vs.110%29.aspx –

ответ

0

Он автоматически заменяет пространство% 20, потому что это веб-запрос, поэтому он кодируется URL. Следовательно, вам нужно URL-адрес декодировать его на стороне сбора.

String value = HttpUtility.UrlDecode(String);