C# 当数据使用GET方法传递到URL时,不允许在Web服务空间中使用

C# 当数据使用GET方法传递到URL时,不允许在Web服务空间中使用,c#,json,web-services,wcf,utf8-decode,C#,Json,Web Services,Wcf,Utf8 Decode,我有一个WCF web服务。我正在使用get方法插入数据。因此,我将所有数据传递到URL中,如 [OperationContract] [WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped, Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "Insert_drug_

我有一个WCF web服务。我正在使用get方法插入数据。因此,我将所有数据传递到URL中,如

[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 patient_id=@patient_id and trimester=@trimester and visit_no=@visit_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???

它会自动将空格替换为%20,因为它是一个Web请求,因此是URL编码的。因此,您需要在接收端对其进行URL解码

String value = HttpUtility.UrlDecode(String);

请尝试HttpServerUtility.UrlDecode: