【发布时间】:2023-04-08 08:43:01
【问题描述】:
如何使用 HTTP PUT 方法发送字节数组?
RestRequest 类的方法 AddFile 发送额外的标头。
方法AddParameter 采用Object 类型。
我是怎么做的:
byte[] data;
using (var ms = new MemoryStream())
{
Serializer.Serialize(ms, query);
data = ms.ToArray();
ms.Close();
}
var client = new RestClient(ServerPath);
var request = new RestRequest(RequestPath, Method.PUT);
request.AddFile("stream", x => new MemoryStream(data), string.Empty);
client.ExecuteAsync(request, responce => Debug.WriteLine(responce.Content));
但是在服务器端我看到了额外的标题
-------------------28947758029299 内容处置:表单数据;名称=“流”;文件名="" 内容类型:应用程序/八位字节流 [这里的原始数据] -------------------------------------------28947758029299--
额外的标题使查询不可读。我做错了什么?
【问题讨论】:
-
服务器期望会是什么样子?有效载荷应该只是原始主体吗?
AddFilesuggests 的使用实际上是期望 multi-part ,但这与列出的内容类型/处置不匹配。例如,这是否像WebClient和client.UploadData(address, "PUT", data);一样简单? -
服务器期望只有原始数据,没有标题。如果我使用 request.AddObject(data) 服务器将其视为 Length=29&Rank=1&SyncRoot=System.Byte%5B%5D&IsReadOnly=False&IsFixedSize=True&IsSynchronized=False
-
如果你没有标头,那么它听起来不像 HTTP...HTTP 有标头。标题的存在不应过度影响它。
-
好的,我有第二个服务客户端,首先我为 android 编写,现在我为 WP8 编写,在 android HttpClient 上我看不到这个问题,但在 RestSharp 上是
-
那么你需要检查 http 看看到底有什么不同。你也可以在 WP8 上使用 HttpClient (nuget.org/packages/Microsoft.Net.Http ?)
标签: c# protocol-buffers restsharp