我希望能够发布文件并作为帖子添加数据的一部分。
这就是我所拥有的:
var restRequest = new RestRequest(Method.POST);
restRequest.Resource = "some-resource";
restRequest.RequestFormat = DataFormat.Json;
string request = JsonConvert.SerializeObject(model);
restRequest.AddParameter("text/json", request, ParameterType.RequestBody);
var fileModel = model as IHaveFileUrl;
var bytes = File.ReadAllBytes(fileModel.LocalStoreUrl);
restRequest.AddFile("FileData", bytes, "file.zip", "application/zip");
var async = RestClient.ExecuteAsync(restRequest, response =>
{
if (PostComplete != null)
PostComplete.Invoke(
new Object(),
new GotResponseEventArgs
<T>(response));
});
它发布的文件很好,但数据不存在 - 这是否可能?
[UPDATE]
我修改了代码以使用多部分标题:
var restRequest = new RestRequest(Method.POST);
Type t = GetType();
Type g = t.GetGenericArguments()[0];
restRequest.Resource = string.Format("/{0}", g.Name);
restRequest.RequestFormat = DataFormat.Json;
restRequest.AddHeader("content-type", "multipart/form-data");
string request = JsonConvert.SerializeObject(model);
restRequest.AddParameter("text/json", request, ParameterType.RequestBody);
var fileModel = model as IHaveFileUrl;
var bytes = File.ReadAllBytes(fileModel.LocalStoreUrl);
restRequest.AddFile("FileData", bytes, "file.zip", "application/zip");
var async = RestClient.ExecuteAsync(restRequest, response =>
{
if (PostComplete != null)
PostComplete.Invoke(
new Object(),
new GotResponseEventArgs
<T>(response));
});
仍然没有运气......任何指针?
答案 0 :(得分:3)
我不是C#
的专家,但我在Grails / Java中使用相同的原则来处理多部分请求。
一些指针(ServiceStack / C#)
Multipart Form Post
MSDN MIME Message
ServiceStack File Attachment
Java对应:
Posting File and Data as JSON in REST Service
我希望这会有所帮助。
答案 1 :(得分:1)
我不确定这是否会有所帮助。但试一试。
由于您尝试将其作为text / json传递,因此您可能会尝试将字节数组转换为字符串并将其添加到请求中。
要将其转换为字符串,您可以执行以下操作。
public string ContentsInText
{
get
{
return Encoding.Default.GetString(_bytecontents);
}
}
要将其转换为字节数组,您可以执行此操作。很可能你必须在你的网络服务中这样做。
public byte[] ContentsInBytes
{
get { return Encoding.Default.GetBytes(_textcontents); }
}