我必须使用多个参数将POST请求发送到Web服务,其中一个参数具有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();
答案 0 :(得分:1)
您有几种选择:
答案 1 :(得分: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>