Как отличить сообщения «бот» от пользователя и «бот» от пользователя, используя промежуточное ПО в конструкторе ботов SDK v4?

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

Если вы хотите сохранить это как единичный тест, тогда вы должны добавить

Если вы хотите проверить, что состояние модели недействительно в реальном запросе, я рекомендую вам прочитать это сообщение в блоге:

http://blogs.msdn.com/b/youssefm/archive/2013/01/28/writing-tests-for-an-asp-net-webapi-service.aspx

и попробуйте протестировать сервер с памятью. Одна из незначительных замечаний для вашего случая заключается в том, что вы можете использовать StringContent вместо ObjectContent в запросе, чтобы убедиться, что веб-API пытается десериализовать и соответствующим образом привязать тело.

2
задан Drew Marsh 17 January 2019 в 02:27
поделиться

1 ответ

Таким образом, функция, которую вы передаете .use, представляет собой промежуточное программное обеспечение, которое может выполнять до и после обработки входящего действия . Вы получаете доступ к "текущей" активности из контекста поворота через свойство turnContext.Activity. Эти действия могут быть отправлены от пользователя или из какой-либо другой системы, которая отправляет их через API DirectLine боту (при условии, что вы используете Bot Framework Service).

Исходящие действия, то есть действия, которые отправляются ботом в ответ на входящие действия, также могут быть перехвачены промежуточным программным обеспечением, но промежуточному программному обеспечению необходимо более явно участвовать в отправке этих действий. , Это делается путем регистрации обработчика в контексте поворота с использованием API onSendActivities.

Все это выглядит примерно так:

botAdapter.use(async (turnContext, next) => {
    // pre-processing of the current incoming activity
    console.log(`Processing activity ${turnContext.activity.id} starting... `);

    // hook up a handler to process any outgoing activities sent during this turn
    turnContext.onSendActivities(async (sendContext, activities, nextSend) => {
       // pre-processing of outgoing activities

       await nextSend();       

       // post-processing outgoing activities
    });

    await next();

    // post-processing of the current incoming activity 
    console.log(`Processing activity ${turnContext.activity.id} finishing. `);    

});

Следует отметить, что обработчики исходящей активности могут вызываться 0..* раз, так как они в основном инициируются вызовами логики нижестоящего потока. turnContext.sendActivit[y|ies]. Поэтому, если во время хода отправлено несколько действий, ваш обработчик будет вызываться для каждого пакета.

0
ответ дан Drew Marsh 17 January 2019 в 02:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: