排名
21
文章
27
粉丝
11
评论
12
.net core自定义项目模板,创建自己的模板项目,使用命令行创建模板项目
尘叶心繁 : 可以可以讲真的我都想弄个模板
net core webapi post传递参数
庸人 :
确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
.net webapi 返回需要的字段,忽略某些字段,修改字段名等
雨雨雨雨雨辰 : 已精
.net webapi 返回需要的字段,忽略某些字段,修改字段名等
雨雨雨雨雨辰 :
疯狂反射
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术

随便创建一个类存放你的ak_id,ak_secret方便测试
- public class SecretTools
- {
- public static string ak_id = "your ak_id ";
- public static string ak_secret = "your secret";
- }
调用的代码:
- public ActionResult Index()
- {
- string url = "https://dtplus-cn-shanghai.data.aliyuncs.com/image/tag";
-
- //准备需要的参数
- string method = "POST";
- string accept = "application/json";
- string contentType = accept;
- string date = DateTime.UtcNow.GetDateTimeFormats('r')[0].ToString();
- //body
- var bodyobj = new
- {
- type = 0,
- image_url = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1581956240165&di=0984096776f9a34597df420f2ff37d1c&imgtype=0&src=http%3A%2F%2F06imgmini.eastday.com%2Fmobile%2F20180827%2F20180827230103_4b8017aa5fe754c1e44960747e375068_15.jpeg"
- };
- string bodyjsonStr = JsonConvert.SerializeObject(bodyobj);
- byte[] data = System.Text.Encoding.ASCII.GetBytes(bodyjsonStr);
-
- byte[] md5 = new MD5CryptoServiceProvider().ComputeHash(System.Text.Encoding.UTF8.GetBytes(bodyjsonStr));
- string bodyMd5 = Convert.ToBase64String(md5);
-
- //signature,authHeader
- string stringToSign = method + "\n" + accept + "\n" + bodyMd5 + "\n" + contentType + "\n" + date + "\n" + "/image/tag";
- var md5code = new HMACSHA1(System.Text.Encoding.UTF8.GetBytes(SecretTools.ak_secret)).ComputeHash(System.Text.Encoding.UTF8.GetBytes(stringToSign));
- var signature = Convert.ToBase64String(md5code);
- string authHeader = "Dataplus " + SecretTools.ak_id + ":" + signature;
- //调用接口
- WebRequest webRequest = WebRequest.Create(url);
- webRequest.Method = method;
- webRequest.ContentType = contentType;
-
- //写入body
- webRequest.GetRequestStream().Write(data, 0, data.Length);
-
- //按照阿里云文档说明提供headers参数设置(注意:这种设置方法会报:必须使用适当的属性或方法修改“Date”标头)
- //req.Headers.Add("Date", date);
- //req.Headers.Add("Authorization", authHeader);
- //req.Headers.Add("Accept", accept);
-
- //根据反射来给header提供需要的参数
- MethodInfo methodInfo = webRequest.Headers.GetType().GetMethod("AddWithoutValidate", BindingFlags.Instance | BindingFlags.NonPublic);
- methodInfo.Invoke(webRequest.Headers, new[] { "Date", date });
- methodInfo.Invoke(webRequest.Headers, new[] { "Authorization", authHeader });
- methodInfo.Invoke(webRequest.Headers, new[] { "Accept", accept });
-
- //调用接口得到返回内容
- System.IO.Stream stream = webRequest.GetResponse().GetResponseStream();
- System.IO.StreamReader streamReader = new System.IO.StreamReader(stream);
- string result = streamReader.ReadToEnd();
-
- return View();
- }
返回数据如下:这里调用的是图像识别中的图像打标接口,其他接口几乎一样修改参数即可
把调用接口的代码优化一下封装成一个方法
上面的方法太多了,不可能每次都写那么大一堆,封装一下我们调用就会方便很多了
- public class AliAITools
- {
- public static string Invoke(string ak_id, string ak_secret, string url, string tag, string bodyjsonStr)
- {
- //准备需要的参数
- string method = "POST";
- string accept = "application/json";
- string contentType = accept;
- string date = DateTime.UtcNow.GetDateTimeFormats('r')[0].ToString();
- byte[] data = System.Text.Encoding.ASCII.GetBytes(bodyjsonStr);
- byte[] md5 = new MD5CryptoServiceProvider().ComputeHash(System.Text.Encoding.UTF8.GetBytes(bodyjsonStr));
- string bodyMd5 = Convert.ToBase64String(md5);
-
- //signature,authHeader
- string stringToSign = method + "\n" + accept + "\n" + bodyMd5 + "\n" + contentType + "\n" + date + "\n" + tag;
- var md5code = new HMACSHA1(System.Text.Encoding.UTF8.GetBytes(ak_secret)).ComputeHash(System.Text.Encoding.UTF8.GetBytes(stringToSign));
- var signature = Convert.ToBase64String(md5code);
- string authHeader = "Dataplus " + ak_id + ":" + signature;
- //调用接口
- WebRequest webRequest = WebRequest.Create(url);
- webRequest.Method = method;
- webRequest.ContentType = contentType;
-
- //写入body
- webRequest.GetRequestStream().Write(data, 0, data.Length);
-
- //按照阿里云文档说明提供headers参数设置(注意:这种设置方法会报:必须使用适当的属性或方法修改“Date”标头)
- //req.Headers.Add("Date", date);
- //req.Headers.Add("Authorization", authHeader);
- //req.Headers.Add("Accept", accept);
-
- //根据反射来给header提供需要的参数
- MethodInfo methodInfo = webRequest.Headers.GetType().GetMethod("AddWithoutValidate", BindingFlags.Instance | BindingFlags.NonPublic);
- methodInfo.Invoke(webRequest.Headers, new[] { "Date", date });
- methodInfo.Invoke(webRequest.Headers, new[] { "Authorization", authHeader });
- methodInfo.Invoke(webRequest.Headers, new[] { "Accept", accept });
-
- //调用接口得到返回内容
- System.IO.Stream stream = webRequest.GetResponse().GetResponseStream();
- System.IO.StreamReader streamReader = new System.IO.StreamReader(stream);
- string result = streamReader.ReadToEnd();
- return result;
- }
- }
调用:这里我们为了区分一下调用图片识别中的场景识别试试
- public ActionResult MageScene()
- {
- //构建参数
- var body = new
- {
- type = 0,
- image_url = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1581958125820&di=385b135756592dfb5f98c14ac4a00a20&imgtype=0&src=http%3A%2F%2Fpix3.agoda.net%2FhotelImages%2F111%2F1115826%2F1115826_16051715300042404569.jpg"
- };
- string bodyJsonStr = JsonConvert.SerializeObject(body);
- string url = "https://dtplus-cn-shanghai.data.aliyuncs.com/image/scene";
- string result = AliAITools.Invoke(SecretTools.ak_id, SecretTools.ak_secret, url, "/image/scene", bodyJsonStr);
- return View();
- }
可以看到很简洁代码会少很多
使用Base64的传递方式调用一下
- public ActionResult MageSceneBase64()
- {
- //base64格式传输图片
- var body = new
- {
- type = 1,
- content = getFileBase64("c://cc.jpg")
- };
- string bodyJsonStr = JsonConvert.SerializeObject(body);
- string url = "https://dtplus-cn-shanghai.data.aliyuncs.com/image/scene";
- string result = AliAITools.Invoke(SecretTools.ak_id, SecretTools.ak_secret, url, "/image/scene", bodyJsonStr);
- return View();
- }
getFileBase64的方法贴一下:
- public string getFileBase64(string fileName)
- {
- FileStream filestream = new FileStream(fileName, FileMode.Open);
- byte[] arr = new byte[filestream.Length];
- filestream.Read(arr, 0, (int)filestream.Length);
- string baser64 = Convert.ToBase64String(arr);
- filestream.Close();
- return baser64;
- }
至于其他同类型的接口我们可以自己修改一下参数即可完成调用
比如图片当然的人脸检测接口:
- /// <summary>
- /// 人脸检测
- /// </summary>
- /// <returns></returns>
- public ActionResult FaceDetect()
- {
- var body = new
- {
- type = 0,
- image_url = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1581961247078&di=360bd00e6abacceaa6e6e2d7c22c82bf&imgtype=0&src=http%3A%2F%2Fn.sinaimg.cn%2Fsinacn20%2F397%2Fw1200h797%2F20180723%2F2155-hftenhz1666262.jpg"
- };
- string bodyJsonStr = JsonConvert.SerializeObject(body);
- string url = "https://dtplus-cn-shanghai.data.aliyuncs.com/face/detect";
- string result = AliAITools.Invoke(SecretTools.ak_id, SecretTools.ak_secret, url, "/face/detect", bodyJsonStr);
- return View();
- }
或者图片当中的人脸属性识别接口:
- /// <summary>
- /// 人脸属性识别
- /// </summary>
- /// <returns></returns>
- public ActionResult FaceAttribute()
- {
- var body = new
- {
- type = 0,
- image_url = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1581961247078&di=360bd00e6abacceaa6e6e2d7c22c82bf&imgtype=0&src=http%3A%2F%2Fn.sinaimg.cn%2Fsinacn20%2F397%2Fw1200h797%2F20180723%2F2155-hftenhz1666262.jpg"
- };
- string bodyJsonStr = JsonConvert.SerializeObject(body);
- string url = "https://dtplus-cn-shanghai.data.aliyuncs.com/face/attribute";
- string result = AliAITools.Invoke(SecretTools.ak_id, SecretTools.ak_secret, url, "/face/attribute", bodyJsonStr);
- return View();
- }
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)
评价
叼着奶瓶逛酒吧
文章写得真心不错,加油哈![[赞]](http://www.tnblog.net/content/static/layui/images/face/56.gif)