是否可以上传文件以及使用servicestack发布数据?

时间:2013-05-29 15:10:01

标签: c# rest servicestack restsharp

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

这就是我所拥有的:

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

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

2 个答案:

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