由于Web API中的特殊字符,因此未设置URL中的发布值

时间:2014-01-10 11:25:29

标签: asp.net-mvc-4 asp.net-web-api httprequest

我正在尝试将带有特殊字符的字符串传递给您的网络API,但却出错了。

在我传递值pro web api:

的行下面
            string listaParcelaSeparadoVirgula = null;

            foreach (var item in listaParcelas)
            {
                listaParcelaSeparadoVirgula = listaParcelaSeparadoVirgula + ";;" + item;
            }

            var result = HttpUtility.UrlEncode(listaParcelaSeparadoVirgula);

            var response = client.PostAsJsonAsync("api/LancamentoReceitaDespesa/AddLancamentoParcelar/" + result, lancamentoReceitaDespesa).Result;

结果是一个字符串变量,其值以“;;”分隔。下面是字符串的内容:

 ";;aaaaa 1/2||10/01/2014|100,00||;;aaaaa 2/2||10/02/2014|100,00||"

使用UrlEncode:

"%3b%3baaaaa+1%2f2%7c%7c10%2f01%2f2014%7c100%2c00%7c%7c%3b%3baaaaa+2%2f2%7c%7c10%2f02%2f2014%7c100%2c00%7c%7c"

错误:

{“将内容复制到流时出错。”}

如何通过pro web api传递这些值?

1 个答案:

答案 0 :(得分:2)

您可以尝试使用base64编码值,因为在url中您可以使用特殊符号

  var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(result);
 var response = client.PostAsJsonAsync("api/LancamentoReceitaDespesa/AddLancamentoParcelar/" + System.Convert.ToBase64String(plainTextBytes), lancamentoReceitaDespesa).Result;

然后在网络

public void AddLancamentoParcelar(string base64EncodedData) {
  var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
  var result = System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
}

我不确定它是否是最好的解决方案,但是因为你可以在url中有任何符号,那么它可能是一个解决方案。