Причина, по которой состояние модели действительна, заключается в том, что при новом обновлении контроллера создается новое состояние модели. Web API не выполняет привязки параметров для вас здесь, поэтому у него даже нет возможности добавлять ошибки состояния модели.
Если вы хотите сохранить это как единичный тест, тогда вы должны добавить
Если вы хотите проверить, что состояние модели недействительно в реальном запросе, я рекомендую вам прочитать это сообщение в блоге:
http://blogs.msdn.com/b/youssefm/archive/2013/01/28/writing-tests-for-an-asp-net-webapi-service.aspx
и попробуйте протестировать сервер с памятью. Одна из незначительных замечаний для вашего случая заключается в том, что вы можете использовать StringContent вместо ObjectContent в запросе, чтобы убедиться, что веб-API пытается десериализовать и соответствующим образом привязать тело.
Таким образом, функция, которую вы передаете .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]
. Поэтому, если во время хода отправлено несколько действий, ваш обработчик будет вызываться для каждого пакета.