C# 在Microsoft Bot框架中使用RESTfull Web服务

C# 在Microsoft Bot框架中使用RESTfull Web服务,c#,web-services,botframework,restful-url,C#,Web Services,Botframework,Restful Url,我试图在我的Bot应用程序中调用restfulapi,当我在web应用程序中测试时,同样的代码也在工作,响应中返回字符串类型的结果。 我使用Web客户端和UploadString()获取结果: public virtual async Task GetOrderDetailforUser(IDialogContext context, IAwaitable<IMessageActivity> result) { var serializedData = JsonConver

我试图在我的Bot应用程序中调用restfulapi,当我在web应用程序中测试时,同样的代码也在工作,响应中返回字符串类型的结果。 我使用Web客户端和UploadString()获取结果:

public virtual async Task GetOrderDetailforUser(IDialogContext context, 
IAwaitable<IMessageActivity> result)
{
    var serializedData = JsonConvert.SerializeObject(input);
    client.Headers.Add(HttpRequestHeader.ContentType, "application/json");            
    client.Headers.Add("Authorization", "Basic <authentication-encoded>");
    var remoteResponse = client.UploadString(new Uri(stringURL), "POST", serializedData);
    var desearilaizeData = JsonConvert.DeserializeObject<rootObjOutput>(remoteResponse);
}
公共虚拟异步任务GetOrderDetailforUser(IDialogContext上下文,
(可等待的结果)
{
var serializedData=JsonConvert.SerializeObject(输入);
client.Headers.Add(HttpRequestHeader.ContentType,“application/json”);
添加(“授权”、“基本”);
var remoteResponse=client.UploadString(新Uri(stringURL),“POST”,序列化数据);
var desearilaizeData=JsonConvert.DeserializeObject(remoteResponse);
}
调试时,在remoteResponse中,我得到一个异常,如下所示:

System.Net.WebException:远程服务器返回错误:(500)内部服务器错误。 位于System.Net.WebClient.UploadDataInternal(Uri地址、字符串方法、字节[]数据、WebRequest和request) 位于System.Net.WebClient.UploadString(Uri地址、字符串方法、字符串数据) 在MyBotApp.StateDialogTest.d_u15.MoveNext()中


错误500表示在远程服务器上而不是在bot中出错。也许你应该看看API收到的数据。@Xeno-D,是的,我到处看了看,但我很惊讶,在本地主机的网站应用程序的aspx.cs(代码隐藏)页面中,完全相同的代码运行正常。这是否意味着在bot框架应用程序中不支持通过webclient调用api?它是受支持的。我经常用它。为什么要使用
UploadString
而不是
PostAsync
?是的,我总是使用HTTPClient,所以我忘记了webclient。而且它不需要太多的代码。试一试,看看是否效果更好。HTTPClient通常更适合进行异步调用。HTTPClient工作了!!谢谢唯一的区别是我使用了PostAsJsonAsync。因此,如果WebClient()在bot中不起作用,原因应该是chatbot中发生了异步调用。是的,这是有意义的,因为任何Bot框架都使用异步方法。