封装微软牛津计划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

相关文章

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Java导入、导出excel用法步骤保姆级教程(附封装好的工具类)

《Java导入、导出excel用法步骤保姆级教程(附封装好的工具类)》:本文主要介绍Java导入、导出excel的相关资料,讲解了使用Java和ApachePOI库将数据导出为Excel文件,包括... 目录前言一、引入Apache POI依赖二、用法&步骤2.1 创建Excel的元素2.3 样式和字体2.

JAVA封装多线程实现的方式及原理

《JAVA封装多线程实现的方式及原理》:本文主要介绍Java中封装多线程的原理和常见方式,通过封装可以简化多线程的使用,提高安全性,并增强代码的可维护性和可扩展性,需要的朋友可以参考下... 目录前言一、封装的目标二、常见的封装方式及原理总结前言在 Java 中,封装多线程的原理主要围绕着将多线程相关的操

Redis客户端工具之RedisInsight的下载方式

《Redis客户端工具之RedisInsight的下载方式》RedisInsight是Redis官方提供的图形化客户端工具,下载步骤包括访问Redis官网、选择RedisInsight、下载链接、注册... 目录Redis客户端工具RedisInsight的下载一、点击进入Redis官网二、点击RedisI

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

一分钟带你上手Python调用DeepSeek的API

《一分钟带你上手Python调用DeepSeek的API》最近DeepSeek非常火,作为一枚对前言技术非常关注的程序员来说,自然都想对接DeepSeek的API来体验一把,下面小编就来为大家介绍一下... 目录前言免费体验API-Key申请首次调用API基本概念最小单元推理模型智能体自定义界面总结前言最