Пост с HttpClient не связывает модель - PullRequest
0 голосов
/ 24 мая 2018

Простая запись из функции Azure в API

using (var response = await httpClient.PostAsJsonAsync(installationServiceUrl, deviceInstallation.ToRequestBody()))
{...}

API получает запрос, но не может связать модель из запроса code

Но Request.Content - этоне нуль и содержит отправленный JSON объект.Заголовок Content-Type установлен на application / json.

Есть предложения?

Обновление: Как я понял, кое-как API считает, что Model - это простое строковое значение (locationId), по крайней мереВот как я понимаю из ModelState.Keys коллекции.Он содержит только locationId.

Обновление: метод ToRequestBody просто меняет форму объекта

    public static DeviceInstallationRequest ToRequestBody(this DeviceInstallation deviceInstallation)
    {
        return new DeviceInstallationRequest()
        {
                InstallationId = deviceInstallation.InstallationId,
                Name = deviceInstallation.Name,
                StartDateTime = deviceInstallation.StartDateTime,
                EndDateTime = deviceInstallation.EndDateTime,
                CreatedDateTime = deviceInstallation.CreatedDateTime,
                InstallationType = deviceInstallation.InstallationType,
                Production = deviceInstallation.Production,
                Default = deviceInstallation.Default
        }
    }

И ожидаемая модель на стороне API:

public class BindDeviceInstallationRequest
{
        [Required]
        public string InstallationId { get; set; }

        [Required]
        public string Name { get; set; }

        [Required]
        public DateTime StartDateTime { get; set; }

        [Required]
        public DateTime EndDateTime { get; set; }

        [Required]
        public DateTime CreatedDateTime { get; set; }

        [Required]
        public InstallationType InstallationType { get; set; }

        [Required]
        public bool Production { get; set; }

        [Required]
        public bool Default { get; set; }
}

1 Ответ

0 голосов
/ 24 мая 2018

В случае проблем с кодировкой попробуйте создать контент самостоятельно и отправить его на сервер,

DeviceInstallationRequest model = deviceInstallation.ToRequestBody();
string json = JsonConvert.SerializeObject(model);
var content = new StringContent(json, Encoding.UTF8, "application/json");
using (var response = await httpClient.PostAsync(installationServiceUrl, content)) {
    //...
}

таким образом, вы получите полный контроль над тем, что отправляется на сервер.

Во время отладки проверьте необработанный JSON от клиента и то, что получено на сервере.

...