Тело запроса настраиваемого класса функции azure - без конструктора без параметров / недопустимая строка преобразования -> guid

У меня есть лазурная функция, которая выглядит примерно так:

    [FunctionName("AddMaterial")]
    public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]AddMaterialCommand command, 
        ILogger log, [Inject(typeof(IMediator))]IMediator mediator)
    {
        log.LogInformation("AddMaterial Function is processing a request");

        var events = await mediator.Send(command);
        if (events != null)
        {
            await mediator.Publish(events);
            return (ActionResult)new OkObjectResult(events);
        }
        return new BadRequestObjectResult(new { message = "Please check that WarehouseId, RollPoNumber, RollNumber, Location and RollWeight are included in request" });
    }

Эта функция использует настраиваемый объект AddMaterialCommand в качестве запроса на документы.

Класс настраиваемого объекта выглядит примерно так:

{
    [DataContract]
    public class AddMaterialCommand : IRequest<EventList>
    {
        [DataMember]
        public Guid WarehouseId { get; set; } 
        [DataMember]
        public int RollPoNumber { get; set; }
        [DataMember]
        public DateTime? DateRecieved { get; set; }

        public AddMaterialCommand(Guid warehouseId, int rollPoNumber,  DateTime dateRecieved)
        {
            WarehouseId = warehouseId;
            RollPoNumber = rollPoNumber;
            Location = location;
            DateRecieved = dateRecieved;
        }
}

При отправке в функцию выдает эту ошибку:

Executed 'AddMaterial' (Failed, Id=d7322061-c972-4e93-83cd-4d0313d26e86) [9/12/2018 8:59:46 PM] System.Private.CoreLib: Exception while executing function: AddMaterial. Microsoft.Azure.WebJobs.Host: Exception binding parameter 'command'. System.Private.CoreLib: No parameterless constructor defined for this object.

Когда я добавляю конструктор без параметров (зачем мне это делать?), Он выдает следующую ошибку:

Executed 'AddMaterial' (Failed, Id=973cd363-19d6-49a3-a2eb-759f30c284bb) [9/12/2018 9:01:27 PM] System.Private.CoreLib: Exception while executing function: AddMaterial. Microsoft.Azure.WebJobs.Host: Exception binding parameter 'command'. System.Private.CoreLib: Invalid cast from 'System.String' to 'System.Guid'.

Что здесь происходит?

Я предполагаю, что тело запроса не читается, а пустое значение вызывает исключение недопустимого приведения. Я до сих пор не понимаю, зачем мне нужен конструктор без параметров. У меня не было этой проблемы до перехода к функциям Azure, когда я использовал привязку [FromBody], но я не думаю, что могу использовать эту привязку с функциями Azure.

свойство Warehouse пытается быть задано строкой. Должен быть какой-то тип преобразования из строки в Guid или изменение WarehouseId на строку, а затем добавление внутреннего свойства или метода для его преобразования или изменения типа данных из источника.

Trae Moore 13.09.2018 19:59

Отправка его в виде строки в post req всегда работала с привязкой [FromBody]. Это что-то недоступно для лазурных функций?

Lamar 13.09.2018 20:49
3
2
1 801
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В итоге я просто заменил настраиваемый класс на httpRequestMessage и создал команду в функции, например

dynamic command = await req.Content.ReadAsAsync<AddMaterialCommand>();

По-прежнему хотелось бы просто использовать настраиваемый класс в качестве параметра функции, ну да ладно.

Другие вопросы по теме