获取图像信息 Cognitve Service - Bad Request ASP.NET MVC c#
Get image information Cognitve Service - Bad Request ASP.NET MVC c#
我正在尝试编写有关读取图像列表并使用认知服务从中获取信息的代码 MVC.NET。
我写了这段代码:
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();
}
}
视图是:
@model List<string>
@foreach (var item in Model)
{
@item
}
我在行中收到错误:400 错误请求:
response = await client.PostAsync(uri, content);
我不知道这段代码有什么问题,有人可以帮我解释一下这个问题吗?
谢谢
如果您使用的是 c#,您会发现官方客户端 SDK 和 time-saver,也可以在 NuGet 中使用。除了调用服务的 ready-made 代码外,它还会为您提供具体类型,因此您不必自己解析响应 JSON。
不管怎样,你的代码大部分是正确的,但是payload需要是二进制的文件内容。所以你会想要:
byte[] byteData = File.ReadAllBytes(photo);
另请注意,您需要等待这样的响应内容:
return await response.Content.ReadAsStringAsync();
我正在尝试编写有关读取图像列表并使用认知服务从中获取信息的代码 MVC.NET。
我写了这段代码:
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();
}
}
视图是:
@model List<string>
@foreach (var item in Model)
{
@item
}
我在行中收到错误:400 错误请求:
response = await client.PostAsync(uri, content);
我不知道这段代码有什么问题,有人可以帮我解释一下这个问题吗? 谢谢
如果您使用的是 c#,您会发现官方客户端 SDK 和 time-saver,也可以在 NuGet 中使用。除了调用服务的 ready-made 代码外,它还会为您提供具体类型,因此您不必自己解析响应 JSON。
不管怎样,你的代码大部分是正确的,但是payload需要是二进制的文件内容。所以你会想要:
byte[] byteData = File.ReadAllBytes(photo);
另请注意,您需要等待这样的响应内容:
return await response.Content.ReadAsStringAsync();