获取图像信息Cognitve服务-错误请求ASP.NET MVC#
我正试图编写一个关于阅读图像列表的代码,并使用认知服务MVC.NET从中获取信息 我写了这段代码:获取图像信息Cognitve服务-错误请求ASP.NET MVC#,c#,asp.net-mvc,microsoft-cognitive,C#,Asp.net Mvc,Microsoft Cognitive,我正试图编写一个关于阅读图像列表的代码,并使用认知服务MVC.NET从中获取信息 我写了这段代码: public async Task<ActionResult> Index() { List<string> list = await ReadImages(); return View(list); } private async Task<List<
public async Task<ActionResult> Index()
{
List<string> list = await ReadImages();
return View(list);
}
private async Task<List<string>> ReadImages()
{
List<string> list = new List<string>();
string[] photoEntries = Directory.GetFiles(_photoFolder);
foreach (string photo in photoEntries)
{
list.Add(await GetCaptionAsync(photo));
}
return list;
}
private async Task<string> GetCaptionAsync(string photo)
{
using (var client = new HttpClient())
{
var queryString = HttpUtility.ParseQueryString(string.Empty);
//setup HttpClient
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", _apiKey);
queryString["visualFeatures"] = "Categories";
queryString["details"] = "Celebrities";
queryString["language"] = "en";
var uri = "https://westus.api.cognitive.microsoft.com/vision/v1.0/analyze?" + queryString;
HttpResponseMessage response;
byte[] byteData = Encoding.UTF8.GetBytes(photo);
using (var content = new ByteArrayContent(byteData))
{
content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
response = await client.PostAsync(uri, content);
}
return response.Content.ToString();
}
}
公共异步任务索引()
{
List List=等待读取图像();
返回视图(列表);
}
专用异步任务ReadImages()
{
列表=新列表();
string[]photoEntries=Directory.GetFiles(\u photoFolder);
foreach(照片条目中的字符串照片)
{
添加(等待GetCaptionAsync(照片));
}
退货清单;
}
专用异步任务GetCaptionAsync(字符串照片)
{
使用(var client=new HttpClient())
{
var queryString=HttpUtility.ParseQueryString(string.Empty);
//安装HttpClient
client.DefaultRequestHeaders.Add(“Ocp Apim订阅密钥”、\u apiKey);
查询字符串[“视觉特征”]=“类别”;
查询字符串[“详细信息”]=“名人”;
查询字符串[“语言”]=“en”;
var uri=”https://westus.api.cognitive.microsoft.com/vision/v1.0/analyze?“+质询;
HttpResponseMessage响应;
byte[]byteData=Encoding.UTF8.GetBytes(照片);
使用(var内容=新的ByteArrayContent(byteData))
{
content.Headers.ContentType=新的MediaTypeHeaderValue(“应用程序/八位字节流”);
response=wait client.PostAsync(uri、内容);
}
返回response.Content.ToString();
}
}
意见是:
@model List<string>
@foreach (var item in Model)
{
@item
}
@型号列表
@foreach(模型中的var项目)
{
@项目
}
我收到一个错误:行中有400个错误请求:
response=wait client.PostAsync(uri、内容)
我不知道这个代码有什么问题,请任何人帮我解释一下这个问题?
谢谢你如果你使用的是c#,你会发现官方客户端是一个节省时间的工具,在NuGet中也有。除了调用服务的现成代码外,它还将为您提供具体的类型,这样您就不必自己解析响应JSON
无论如何,您的代码基本上是正确的,但是负载需要是二进制文件内容。因此,您需要:
byte[] byteData = File.ReadAllBytes(photo);
还请注意,您需要等待响应内容,如下所示:
return await response.Content.ReadAsStringAsync();
您发送的文件名不是实际的文件名。file.ReadAllBytes(照片)应该可以工作。