【发布时间】:2017-01-03 18:19:18
【问题描述】:
我正在尝试使用 MS Bot Framework 构建一个机器人,并且我有两个对话框(父级和子级)。我从 ParentDialog 中的 web api 获取 JSON 响应并将其映射到数据模型类 WebResults。基于一些特殊活动,我必须切换到 ChildDialog,并且我需要 DataResults.title 字符串。但是在切换到 ChildDialog 之后,所有数据映射都会返回 null。有没有办法在 ChildDialog 中获取 DataResults.title 字符串?
下面是我的 MessageController
public class MessagesController : ApiController
{
/// <summary>
/// POST: api/Messages
/// Receive a message from a user and reply to it
/// </summary>
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
if (activity.Type == ActivityTypes.Message)
{
await Conversation.SendAsync(activity, () => new ParentDialog());
}
else
{
HandleSystemMessage(activity);
}
var response = Request.CreateResponse(HttpStatusCode.OK);
return response;
}
父对话框
public class ParentDialog : IDialog
{
public async Task StartAsync(IDialogContext context)
{
context.Wait(ActivityReceivedAsync);
}
private async Task ActivityReceivedAsync(IDialogContext context, IAwaitable<object> result)
{
var activity = await result as Activity;
webApiResponse = await httpClient.GetStringAsync(Uri);
webApiJsonResponse = JsonConvert.DeserializeObject<WebResults>(webApiResponse);
DataResult[] infoResult = wikiJsonResponse.query.pages;
If (activity.Text == "Something Special")
{
await context.Forward(new ChildDialog(), ActivityReceivedAsync, activity, CancellationToken.None);
}
else
{
//some handling on inforesult
await context.PostAsync(replyMessage);
context.Done(false);
}
}
子对话框
public class ChildDialog : IDialog
{
public async Task StartAsync(IDialogContext context)
{
context.Wait(ActivityReceivedAsync);
}
private async Task ActivityReceivedAsync(IDialogContext context, IAwaitable<object> result)
{
DataResult data = new DataResult(); //Goes null
string pageTiltle = data.title;
// Some handling with pageTitle
context.Done(true);
}
数据模型
public class WebResults
{
public string batchcomplete { get; set; }
public Query query { get; set; }
}
public class Query
{
public DataResult[] pages { get; set; }
}
public class DataResult
{
public string title { get; set; }
public Coordinate[] coordinates { get; set; }
public string extract { get; set; }
public Thumbnail thumbnail { get; set; }
public string pageimage { get; set; }
}
【问题讨论】:
标签: c# .net json dialog botframework