【发布时间】:2020-01-03 17:31:04
【问题描述】:
我在获取允许获取组成员的 REST API 响应时遇到了一些问题 (GET {serviceUrl}/v3/conversations/{conversationId}/members)。我正在 Bot Emulator 中调试我的机器人,它在这里运行良好
主要问题是我真的无法识别问题。我知道问题出在请求中,因为 getResponse 方法在服务器上时会导致所有程序崩溃(但为什么这在机器人模拟器中有效?)。这里是代码(我使用的是 .NET CORE,Microsoft Bot Framework)。 授权中的 P.S.{id} 是正确的,我从另一个请求中得到它(但与请求在任何地方都有效的问题请求不同),{url} 是 turnContext.Activity.ServiceUrl
HttpWebRequest webRequest23 = (HttpWebRequest)WebRequest.Create($"{url}/v3/conversations/{turnContext.Activity.Conversation.Id}/members");
await turnContext.SendActivityAsync($"{url}/v3/conversations/{turnContext.Activity.Conversation.Id}/members");
await turnContext.SendActivityAsync(turnContext.Activity.Conversation.Id);
webRequest23.ContentType = "application/json";
webRequest23.Headers["Authorization"] = $"Bearer {id}";
WebResponse response2 = webRequest23.GetResponse();//crash here
await turnContext.SendActivityAsync("3");
string smth25 = "";
using (StreamReader stream = new StreamReader(response2.GetResponseStream(), true))
{
smth25 = stream.ReadToEnd();
}
JArray jsonArray = JArray.Parse(smth25);
List<string> names = new List<string>();
foreach(var x in jsonArray)
{
var name = JObject.Parse(x.ToString())["name"].ToString();
names.Add("@" + name);
}
string s = "This group consists of - ";
foreach (var x in names){
s += "" + x + ",";
}
await turnContext.SendActivityAsync(s);
这是我获得 id 的方式:
string stringData = "grant_type=client_credentials&client_id=66b16ef5-d086-40b7-ae9c-2f50a1f028c6&client_secret=yRUYg4g.:ANuw3Y_01V=@.JkAv=@g3EE&scope=https%3A%2F%2Fapi.botframework.com%2F.default";
var data = Encoding.Default.GetBytes(stringData);
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token");
webRequest.Host = "login.microsoftonline.com";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.Method = "POST";
var newStream = webRequest.GetRequestStream();
newStream.Write(data, 0, data.Length);
newStream.Close();
WebResponse response = webRequest.GetResponse();
string line = string.Empty;
string smone = "";
using (StreamReader stream = new StreamReader(response.GetResponseStream(), true))
{
smone = stream.ReadToEnd();
}
var id = JObject.Parse(smone)["access_token"].ToString();
【问题讨论】:
-
@dbc 这是一个问题,而不是代码。我认为问题不在解析中,因为它在模拟器中工作)))。你能帮我吗?因为我真的很不高兴我不知道该怎么办......
-
希尔顿的回答可以接受吗?
标签: c# json rest api botframework