C# RestSharp и ASP NET Web API - передача json и файлов

1094
24 января 2017, 21:01

Как организовать отправку данных в формате JSON и файлов на удалённый сервер? И как правильно принять данные?

Клиент:

 protected override void SaveDoWork(object sender, DoWorkEventArgs e)
    {
        IRestResponse response;
        Meta meta = e.Argument as Meta;
        var json = JsonConvert.SerializeObject(meta, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.Objects });
        var request = new RestRequest("api/v1/persons/save", Method.POST);
        request.AddHeader("Charset", "utf-8");
        request.AddHeader("Content-Type", "multipart/form-data");
        request.AddParameter("application/json", json, ParameterType.RequestBody);
        using (var stream = new System.IO.MemoryStream())
        {
            if (meta.Person.PersonPhotoFrontView != null)
            {
                meta.Person.PersonPhotoFrontView.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
                request.AddFileBytes("PersonPhoto", stream.ToArray(), "PersonPhotoFrontView");
            }
        }

        response = this._client.Execute(request);
        if (response.ErrorException == null)
        {                
        }
        else
        {
        }
    }

Сервер:

[HttpPost, Route("save")]
public object Save([FromBody] JObject meta)
{
     Meta metaData = meta.ToObject<Meta>();
     if (metaData != null)
      {
           if (_personModel.Save(metaData, HttpContext.Current.Request))
           {
                return new Notification("OK");
           }
       }
      return new Notification("Fail");
}

После отправки, на сервер выбрасывает исключение:

{
    "Message": "Media Type \"multipart/form-data\" request entity for this resource is not supported",
    "ExceptionMessage": "There are no available MediaTypeFormatter read object type \"JObject\" with the contents of media type \"multipart/form-data\".",
    "ExceptionType": "System.Net.Http.UnsupportedMediaTypeException",
    "StackTrace": "   в System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)rn   в System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)"
}
READ ALSO
Почему ошибка в таком простом коде? [требует правки]

Почему ошибка в таком простом коде? [требует правки]

В методе test ошибка при передаче параметра Only assignment, call, increment, decrement and new object expressions can be used as a statment

352
Виснет Unity при создании объекта

Виснет Unity при создании объекта

Если использовать этот код например по нажатию на боксколлайдер, то код срабатывает и объекты создаются, но мне нужно использовать этот код...

362
Linq бинарный файл

Linq бинарный файл

Провожу сериализацию в бинарник, потом эти записанные данные могут обновится и нужно сделать запись об этом в бинарникКак можно найти нужную...

335
WPF в С# проблема с custom

WPF в С# проблема с custom

Есть код XAML и есть класс CustomVisualFrameworkElement, который унаследован от FrameworkElement и реализует с помощью Visual некоторые фигурыНо XAML почему то не видит...

521