Можна загрузіць файл, а таксама паштовыя дадзеныя з дапамогай servicestack?

Я хачу, каб мець магчымасць апублікаваць файл і, як частка гэтага паста дадаць дадзеныя.

Вось што ў мяне ёсць:

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

Яшчэ не пашанцавала ... якія-небудзь паказальнікі?

10
Хто-небудзь ёсць якія-небудзь доказы на гэты конт?
дададзена аўтар iwayneo, крыніца
ды - спрабаваў як: /
дададзена аўтар iwayneo, крыніца
Гэта проста паказвае, загрузіўшы файл без якой-небудзь мадэлі няма?
дададзена аўтар iwayneo, крыніца
Вы павінны б тып змесціва усталяваны ў становішча шматчастковы/змешаны або шматгалосныя/form-дадзеныя у загалоўку запыту. Пры тым, што вы можаце атрымаць доступ да Запытаная целе і атрымаць файл з запыту адначасова.
дададзена аўтар dmahapatro, крыніца
Вы таксама можа паспрабаваць з шматчастковы/змяшаным?
дададзена аўтар dmahapatro, крыніца
Можа быць, гэта было б карысна: stackoverflow.com/questions/8296867/…
дададзена аўтар Victor Suzdalev, крыніца

6 адказы

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

Some pointers (ServiceStack/C#)
Multipart Form Post
MSDN MIME Message
ServiceStack File Attachment

Java corresponds:
Posting File and Data as JSON in REST Service

Я спадзяюся, што гэта дапамагае.

3
дададзена
Мне трэба канкрэтна ведаць, як зрабіць гэта з дапамогай restsharp (або servicestack - пераважна restsharp) - дзякуй за адказ, хоць
дададзена аўтар iwayneo, крыніца

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

Some pointers (ServiceStack/C#)
Multipart Form Post
MSDN MIME Message
ServiceStack File Attachment

Java corresponds:
Posting File and Data as JSON in REST Service

Я спадзяюся, што гэта дапамагае.

3
дададзена
Мне трэба канкрэтна ведаць, як зрабіць гэта з дапамогай restsharp (або servicestack - пераважна restsharp) - дзякуй за адказ, хоць
дададзена аўтар iwayneo, крыніца

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

Some pointers (ServiceStack/C#)
Multipart Form Post
MSDN MIME Message
ServiceStack File Attachment

Java corresponds:
Posting File and Data as JSON in REST Service

Я спадзяюся, што гэта дапамагае.

3
дададзена
Мне трэба канкрэтна ведаць, як зрабіць гэта з дапамогай restsharp (або servicestack - пераважна restsharp) - дзякуй за адказ, хоць
дададзена аўтар iwayneo, крыніца

Я не ўпэўнены, калі гэта дапаможа. Але даць яму паспрабаваць.

Так як вы спрабуеце перадаць яго як тэкст/JSon вы можаце паспрабаваць пераўтварыць масіў байтаў ў радок і дадаць яго да запыту.

Для таго, каб пераўтварыць яго ў радок, вы можаце зрабіць нешта накшталт гэтага.

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

Для таго, каб пераўтварыць яго ў масіў байтаў, вы можаце зрабіць гэта. Хутчэй за ўсё, вам прыйдзецца зрабіць гэта ў вашым вэб-службы.

    public byte[] ContentsInBytes
    {
        get { return Encoding.Default.GetBytes(_textcontents); }
    }
2
дададзена
Я пачынаю думаць, што гэта адзіны спосаб ...
дададзена аўтар iwayneo, крыніца

Я не ўпэўнены, калі гэта дапаможа. Але даць яму паспрабаваць.

Так як вы спрабуеце перадаць яго як тэкст/JSon вы можаце паспрабаваць пераўтварыць масіў байтаў ў радок і дадаць яго да запыту.

Для таго, каб пераўтварыць яго ў радок, вы можаце зрабіць нешта накшталт гэтага.

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

Для таго, каб пераўтварыць яго ў масіў байтаў, вы можаце зрабіць гэта. Хутчэй за ўсё, вам прыйдзецца зрабіць гэта ў вашым вэб-службы.

    public byte[] ContentsInBytes
    {
        get { return Encoding.Default.GetBytes(_textcontents); }
    }
2
дададзена
Я пачынаю думаць, што гэта адзіны спосаб ...
дададзена аўтар iwayneo, крыніца

Я не ўпэўнены, калі гэта дапаможа. Але даць яму паспрабаваць.

Так як вы спрабуеце перадаць яго як тэкст/JSon вы можаце паспрабаваць пераўтварыць масіў байтаў ў радок і дадаць яго да запыту.

Для таго, каб пераўтварыць яго ў радок, вы можаце зрабіць нешта накшталт гэтага.

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

Для таго, каб пераўтварыць яго ў масіў байтаў, вы можаце зрабіць гэта. Хутчэй за ўсё, вам прыйдзецца зрабіць гэта ў вашым вэб-службы.

    public byte[] ContentsInBytes
    {
        get { return Encoding.Default.GetBytes(_textcontents); }
    }
2
дададзена
Я пачынаю думаць, што гэта адзіны спосаб ...
дададзена аўтар iwayneo, крыніца