Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取图像信息Cognitve服务-错误请求ASP.NET MVC#_C#_Asp.net Mvc_Microsoft Cognitive - Fatal编程技术网

获取图像信息Cognitve服务-错误请求ASP.NET MVC#

获取图像信息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<

我正试图编写一个关于阅读图像列表的代码,并使用认知服务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();
            }
        }
公共异步任务索引()
{
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(照片)应该可以工作。