封装微软牛津计划API客户端

2023-12-14 00:32

本文主要是介绍封装微软牛津计划API客户端,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本主题所有内容以软认知服务为技术基础

关于微软人脸识别,请参阅

本节内容请先参阅微软认知服务人脸API接口列表

##封装微软牛津计划API客户端

牛津计划的API是由一个基础Url、服务名称、参数组成为的服务,大多是POST(我还没有完全看完),这些参数多是字符串,但也有流格式(比如上传图片什么的),我们的ProjecToxfordClientHelper就是计划将牛津API的实现进行封装,为我们不同的APIController提供服务。
我们先定义一些基本的字段

private const string serviceHost = "https://api.projectoxford.ai/face/v1.0";
private const string KEY = "";
private HttpClient client;
private static string photofolder = System.Configuration.ConfigurationManager.AppSettings["ProjecToxfordPhotos"];

serviceHost就是牛津的API,KEY你可以通过注册牛津开发计划来获得,photofolder是保持我们需要上传图所在的位置。
我们在构造函数中初始化HttpClient,为HttpClient添加两个必须的头标识。

public ProjecToxfordClientHelper()
{client = new HttpClient();var queryString = HttpUtility.ParseQueryString(string.Empty);client.DefaultRequestHeaders.Add("ContentType", "application/json");client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", KEY);
}

接下来,我们要实现两种POST的提交,一种是提交流参数,一种是提交字符串参数

实现提交字符串参数的POST

public async Task<ProjecToxfordResponseModels> PostAsync(string querkey, object body, Dictionary<string, string> querystr = null)
{var queryString = HttpUtility.ParseQueryString(string.Empty);if (querystr != null){foreach (var entry in querystr){queryString[entry.Key] = entry.Value;}}var uri = string.Format("{0}/{1}?{2}", serviceHost, querkey, queryString);var jsonStr = Newtonsoft.Json.JsonConvert.SerializeObject(body);byte[] byteData = Encoding.UTF8.GetBytes(jsonStr);HttpResponseMessage response;using (var content = new ByteArrayContent(byteData)){content.Headers.ContentType = new MediaTypeHeaderValue("application/json");response = await client.PostAsync(uri, content);var msg = await response.Content.ReadAsStringAsync();return new ProjecToxfordResponseModels(msg, response.StatusCode);}
}

所谓的字符串参数就是将实现Fields的对象以JSON格式序列化,然后POST给牛津API。

var jsonStr = Newtonsoft.Json.JsonConvert.SerializeObject(body);
byte[] byteData = Encoding.UTF8.GetBytes(jsonStr);

所以要记得content的内容类型要定义为

content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

那类似图片这些流文件不能采用这个方法,所以我们重载了一个方法

public async Task<ProjecToxfordResponseModels> PostAsync(string querkey, byte[] body, Dictionary<string, string> querystr = null)
{var queryString = HttpUtility.ParseQueryString(string.Empty);if (querystr != null){foreach (var entry in querystr){queryString[entry.Key] = entry.Value;}}var uri = string.Format("{0}/{1}?{2}", serviceHost, querkey, queryString);HttpResponseMessage response;using (var content = new ByteArrayContent(body)){content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");response = await client.PostAsync(uri, content);var msg = await response.Content.ReadAsStringAsync();return new ProjecToxfordResponseModels(msg, response.StatusCode);}
}

看下参数,流格式的内容需要以Byte数组的方式进行传递,但实际的处理中没有什么太大的不同,如果传递的是Byte数组就直接处理,否则先序列化为Byte数组,但是要注意的是,流媒体的json的编码是不同的,

Created with Raphaël 2.2.0 开始 is byte array? byetArray To Content is byte array? application/octet-stream End application/json JSON SerialzeObj getBytes yes no yes no

我们再提供一个帮助处理牛津API返回值的方法

public HttpResponseMessage CreateHttpResponseMessage(HttpRequestMessage request, ProjecToxfordResponseModels result)
{if (result.StatusCode == HttpStatusCode.OK){return request.CreateResponse(HttpStatusCode.OK, result.Message);}else{return request.CreateErrorResponse(result.StatusCode, result.Message);}
}

这篇关于封装微软牛津计划API客户端的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/490504

相关文章

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

MYSQL查询结果实现发送给客户端

《MYSQL查询结果实现发送给客户端》:本文主要介绍MYSQL查询结果实现发送给客户端方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql取数据和发数据的流程(边读边发)Sending to clientSending DataLRU(Least Rec

Python FastMCP构建MCP服务端与客户端的详细步骤

《PythonFastMCP构建MCP服务端与客户端的详细步骤》MCP(Multi-ClientProtocol)是一种用于构建可扩展服务的通信协议框架,本文将使用FastMCP搭建一个支持St... 目录简介环境准备服务端实现(server.py)客户端实现(client.py)运行效果扩展方向常见问题结

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

C#使用MQTTnet实现服务端与客户端的通讯的示例

《C#使用MQTTnet实现服务端与客户端的通讯的示例》本文主要介绍了C#使用MQTTnet实现服务端与客户端的通讯的示例,包括协议特性、连接管理、QoS机制和安全策略,具有一定的参考价值,感兴趣的可... 目录一、MQTT 协议简介二、MQTT 协议核心特性三、MQTTNET 库的核心功能四、服务端(BR

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

python通过curl实现访问deepseek的API

《python通过curl实现访问deepseek的API》这篇文章主要为大家详细介绍了python如何通过curl实现访问deepseek的API,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... API申请和充值下面是deepeek的API网站https://platform.deepsee

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程

Java对接Dify API接口的完整流程

《Java对接DifyAPI接口的完整流程》Dify是一款AI应用开发平台,提供多种自然语言处理能力,通过调用Dify开放API,开发者可以快速集成智能对话、文本生成等功能到自己的Java应用中,本... 目录Java对接Dify API接口完整指南一、Dify API简介二、准备工作三、基础对接实现1.

一文详解如何在Vue3中封装API请求

《一文详解如何在Vue3中封装API请求》在现代前端开发中,API请求是不可避免的一部分,尤其是与后端交互时,下面我们来看看如何在Vue3项目中封装API请求,让你在实现功能时更加高效吧... 目录为什么要封装API请求1. vue 3项目结构2. 安装axIOS3. 创建API封装模块4. 封装API请求