Тело запроса пользовательского класса функции Azure - нет конструктора без параметров / недопустимая строка приведения -> guid - PullRequest
0 голосов
/ 13 сентября 2018

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

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

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

Выполнено AddMaterial (Ошибка, Id = d7322061-c972-4e93-83cd-4d0313d26e86) [12.09.2008 20:59:46] System.Private.CoreLib: Исключение при выполнении функции: AddMaterial. Microsoft.Azure.WebJobs.Host: параметр привязки исключения «Команда». System.Private.CoreLib: нет конструктора без параметров определенный для этого объекта .

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

Выполнено AddMaterial (Ошибка, Id = 973cd363-19d6-49a3-a2eb-759f30c284bb) [12.09.2008 21:01:27] System.Private.CoreLib: Исключение при выполнении функции: AddMaterial. Microsoft.Azure.WebJobs.Host: параметр привязки исключения «Команда». System.Private.CoreLib: неверное приведение из 'System.String' «System.Guid ».

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

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

1 Ответ

0 голосов
/ 14 сентября 2018

В итоге я просто заменил пользовательский класс на httpRequestMessage и создал команду в функции следующим образом:

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

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

...