Можно ли загружать файл, а также отправлять данные с помощью служебной программы?

Я хочу иметь возможность опубликовать файл и как часть этого сообщения добавить данные.

Вот что у меня есть:

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

По-прежнему не повезло... любые указатели?

Ответ 1

Я не уверен, что это поможет. Но попробуйте.

Поскольку вы пытаетесь передать его как text/json, вы можете попытаться преобразовать ваш массив байтов в строку и добавить его в запрос.

Чтобы преобразовать его в строку, вы можете сделать что-то вроде этого.

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

Чтобы преобразовать его в массив байтов, вы можете это сделать. Скорее всего, вам придется сделать это в своем веб-сервисе.

    public byte[] ContentsInBytes
    {
        get { return Encoding.Default.GetBytes(_textcontents); }
    }

Ответ 2

Я не эксперт в C#, но я использовал тот же принцип в Grails/Java для многопрофильных запросов.

Некоторые указатели (ServiceStack/С#)
Сообщение о многостраничной форме
Сообщение MSDN MIME
Вложение файла ServiceStack

Java соответствует:
Проводка файла и данных как JSON в службе REST

Надеюсь, это поможет.