可以使用字符串和字节数组参数发送get / post请求吗?

问题描述 投票:0回答:2

我必须向具有多个参数的Web服务发送POST请求,其中一个参数具有byte []类型。但我不知道如何传递byte []参数。有人知道吗?另外,我想知道如何在GET请求中发送byte []数组。任何帮助将不胜感激!

    using (var client = new WebClient())
    {
            var values = new NameValueCollection();
            values["thing1"] = "hello";
            values["thing2"] = "world"; // how to pass byte[] here?

            var response = client.UploadValues("http://www.example.com/recepticle.aspx", values);

            var responseString = Encoding.Default.GetString(response);
     }

或者使用HttpClient的另一个变种:

    private static readonly HttpClient client = new HttpClient();
    var values = new Dictionary<string, string>
    {
       { "thing1", "hello" },
       { "thing2", "world" } // how to pass byte[] here?
    };

    var content = new FormUrlEncodedContent(values);

    var response = await client.PostAsync("http://www.example.com/recepticle.aspx", content);

    var responseString = await response.Content.ReadAsStringAsync();
c# post get post-parameter
2个回答
1
投票

你有几个选择:

  • 将请求的内容类型更改为二进制格式。这将排除包括任何字符串。
  • 使用multi-part format like RFC 1341
  • 对二进制数据进行编码,以便将其作为字符串发送。 Base64很常见。

0
投票

@Heretic Monkey在评论中说:好吧,如果您使用的结构是字符串值,则无法传递byte []数组...除非您使用Base 64

也许在某些情况下你是对的但是:

Convert.ToBase64String您可以使用Convert.FromBase64String轻松地将输出字符串转换回字节数组。注意:输出字符串可以包含“+”,“/”和“=”。如果要在URL中使用该字符串,则需要对其进行显式编码。 © combo_ci

因此,有时最好使用HttpServerUtility.UrlTokenEncode(byte [])并在服务器端解码它。

但我的问题是Web服务无法接受大文件。我得到的客户端例外是“415:不支持的媒体类型”。通过更改Web服务端的配置解决了这个问题:

<!-- To be added under <system.web> -->
<httpRuntime targetFramework="4.5" maxRequestLength="1048576" executionTimeout="3600" />

<!-- To be added under <system.webServer> -->
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
© www.soinside.com 2019 - 2024. All rights reserved.