Botframework Microsoft认知服务Web搜索API-反序列化问题
我想学习认知服务Web搜索API,所以我开始创建一个机器人应用程序。我已经有了一个帐户子密钥和其他必需的信息,我也读了很多文章并观看了2016年构建视频。我在反序列化结果时遇到了麻烦。 我找不到可以用来执行此操作的代理类。 我使用的url是 我为以前的api版本找到了一个代理类。谁能告诉我如何在VS2015中为这些服务获取api请求/响应的代理类 我的代码如下所示:Botframework Microsoft认知服务Web搜索API-反序列化问题,botframework,microsoft-cognitive,Botframework,Microsoft Cognitive,我想学习认知服务Web搜索API,所以我开始创建一个机器人应用程序。我已经有了一个帐户子密钥和其他必需的信息,我也读了很多文章并观看了2016年构建视频。我在反序列化结果时遇到了麻烦。 我找不到可以用来执行此操作的代理类。 我使用的url是 我为以前的api版本找到了一个代理类。谁能告诉我如何在VS2015中为这些服务获取api请求/响应的代理类 我的代码如下所示: string BingSearchUrl = "https://api.cognitive.microsoft.com/bi
string BingSearchUrl = "https://api.cognitive.microsoft.com/bing/v5.0/search/";
const string bingKey = "Key";
public static async Task<string> Search(string query)
{
var client = HttpClientFactory.Create();
var queryString = BingSearchUrl + "?q=" + query + "&count=10";
// Request headers
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", bingKey);
client.DefaultRequestHeaders.Add("Accept", "application/json");
// Request parameters
string r = await client.GetStringAsync(queryString);
var jsonResult = JsonConvert.DeserializeObject<Bing.ExpandableSearchResult>(r);
return jsonResult.Web.First().Title;
string BingSearchUrl=”https://api.cognitive.microsoft.com/bing/v5.0/search/";
常量字符串bingKey=“Key”;
公共静态异步任务搜索(字符串查询)
{
var client=HttpClientFactory.Create();
var queryString=BingSearchUrl+“?q=“+query+”&count=10”;
//请求头
client.DefaultRequestHeaders.Add(“Ocp Apim订阅密钥”,bingKey);
client.DefaultRequestHeaders.Add(“Accept”、“application/json”);
//请求参数
string r=await client.GetStringAsync(queryString);
var jsonResult=JsonConvert.DeserializeObject(r);
返回jsonResult.Web.First().Title;
尝试下面的代码
public string BingSearchUrl = "https://api.cognitive.microsoft.com/bing/v5.0/search/";
const string bingKey =[KEY];
public async void Search()
{
var client = new HttpClient();
var queryString = HttpUtility.ParseQueryString(string.Empty);
// Request headers
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", bingKey);
// Request parameters
queryString["q"] = "microsoft";
queryString["count"] = "10";
queryString["offset"] = "0";
queryString["mkt"] = "en-us";
queryString["safeSearch"] = "Moderate";
var uri = "https://api.cognitive.microsoft.com/bing/v5.0/news/search?" + queryString;
var response = await client.GetStringAsync(uri);
var jsonResult = JsonConvert.DeserializeObject<BingJson>(response);
string title = jsonResult.value[0].name.ToString();
}
有了这个模型,我就能得到想要的结果。另一个答案中给出的模型在我的案例中不起作用
namespace BingSearchBot
{
public class RootObject
{
public string _type { get; set; }
public WebPages webPages { get; set; }
public RelatedSearches relatedSearches { get; set; }
public RankingResponse rankingResponse { get; set; }
}
public class WebPages
{
public string webSearchUrl { get; set; }
public int totalEstimatedMatches { get; set; }
public List<Value> value { get; set; }
}
public class Value
{
public string id { get; set; }
public string name { get; set; }
public string url { get; set; }
public List<About> about { get; set; }
public string displayUrl { get; set; }
public string snippet { get; set; }
public List<DeepLink> deepLinks { get; set; }
public string dateLastCrawled { get; set; }
public List<SearchTag> searchTags { get; set; }
}
public class About
{
public string name { get; set; }
}
public class DeepLink
{
public string name { get; set; }
public string url { get; set; }
public string snippet { get; set; }
}
public class SearchTag
{
public string name { get; set; }
public string content { get; set; }
}
public class Value2
{
public string text { get; set; }
public string displayText { get; set; }
public string webSearchUrl { get; set; }
}
public class RelatedSearches
{
public string id { get; set; }
public List<Value2> value { get; set; }
}
public class Value3
{
public string id { get; set; }
}
public class Item
{
public string answerType { get; set; }
public int resultIndex { get; set; }
public Value3 value { get; set; }
}
public class Mainline
{
public List<Item> items { get; set; }
}
public class RankingResponse
{
public Mainline mainline { get; set; }
}
}
名称空间搜索机器人
{
公共类根对象
{
公共字符串_type{get;set;}
公共网页网页{get;set;}
公共关联搜索关联搜索{get;set;}
公共RankingResponse RankingResponse{get;set;}
}
公开课网页
{
公共字符串webSearchUrl{get;set;}
公共整数totalEstimatedMatches{get;set;}
公共列表值{get;set;}
}
公共阶级价值
{
公共字符串id{get;set;}
公共字符串名称{get;set;}
公共字符串url{get;set;}
关于{get;set;}的公共列表
公共字符串displayUrl{get;set;}
公共字符串片段{get;set;}
公共列表深度链接{get;set;}
公共字符串dateLastCrawled{get;set;}
公共列表搜索标记{get;set;}
}
公开课关于
{
公共字符串名称{get;set;}
}
公共类深度链接
{
公共字符串名称{get;set;}
公共字符串url{get;set;}
公共字符串片段{get;set;}
}
公共类搜索标签
{
公共字符串名称{get;set;}
公共字符串内容{get;set;}
}
公共类价值2
{
公共字符串文本{get;set;}
公共字符串displayText{get;set;}
公共字符串webSearchUrl{get;set;}
}
公共类相关搜索
{
公共字符串id{get;set;}
公共列表值{get;set;}
}
公共类价值3
{
公共字符串id{get;set;}
}
公共类项目
{
公共字符串应答类型{get;set;}
public int resultIndex{get;set;}
公共价值3值{get;set;}
}
公共级干线
{
公共列表项{get;set;}
}
公共类响应
{
公共主线主线{get;set;}
}
}
该服务返回结果,但当我反序列化Object时,它显示为空,这对相同的结果也没有帮助。此外,我的问题是如何下载此web api服务的代理类。我查找了以前版本的Bing Search,我们可以将其作为服务引用添加到我们的项目中,但使用此新URL,我无法将其作为服务引用添加vice reference和我都无法获取WSDL。我用以前版本的proxy尝试了它,但也没有帮到我。非常奇怪的是,在所有Web搜索文档中都没有提到如何获取Web结果。最后,在多次尝试之后,我创建了一个工作正常的模型。您的模型@codelahiru有问题吗ns由于某种原因无法反序列化的数组属性。
namespace BingSearchBot
{
public class RootObject
{
public string _type { get; set; }
public WebPages webPages { get; set; }
public RelatedSearches relatedSearches { get; set; }
public RankingResponse rankingResponse { get; set; }
}
public class WebPages
{
public string webSearchUrl { get; set; }
public int totalEstimatedMatches { get; set; }
public List<Value> value { get; set; }
}
public class Value
{
public string id { get; set; }
public string name { get; set; }
public string url { get; set; }
public List<About> about { get; set; }
public string displayUrl { get; set; }
public string snippet { get; set; }
public List<DeepLink> deepLinks { get; set; }
public string dateLastCrawled { get; set; }
public List<SearchTag> searchTags { get; set; }
}
public class About
{
public string name { get; set; }
}
public class DeepLink
{
public string name { get; set; }
public string url { get; set; }
public string snippet { get; set; }
}
public class SearchTag
{
public string name { get; set; }
public string content { get; set; }
}
public class Value2
{
public string text { get; set; }
public string displayText { get; set; }
public string webSearchUrl { get; set; }
}
public class RelatedSearches
{
public string id { get; set; }
public List<Value2> value { get; set; }
}
public class Value3
{
public string id { get; set; }
}
public class Item
{
public string answerType { get; set; }
public int resultIndex { get; set; }
public Value3 value { get; set; }
}
public class Mainline
{
public List<Item> items { get; set; }
}
public class RankingResponse
{
public Mainline mainline { get; set; }
}
}