10

我希望能够发布一个文件并作为该帖子的一部分添加数据。

这是我所拥有的:

            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));
            });

它可以很好地发布文件,但数据不存在 - 这甚至可能吗?

[更新]

我已经修改了代码以使用多部分标题:

            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));
            });

仍然没有运气......任何指针?

4

2 回答 2

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

我希望这有帮助。

于 2013-06-01T17:20:26.973 回答
1

我不确定这是否会有所帮助。但是试一试。

由于您尝试将其作为 text/json 传递,您可能会尝试将字节数组转换为字符串并将其添加到请求中。

要将其转换为字符串,您可以执行以下操作。

    public string ContentsInText
    {
        get
        {
            return Encoding.Default.GetString(_bytecontents);
        }
    }

要将其转换为字节数组,您可以这样做。很可能您必须在您的 Web 服务中执行此操作。

    public byte[] ContentsInBytes
    {
        get { return Encoding.Default.GetBytes(_textcontents); }
    }
于 2013-06-06T04:32:29.240 回答