博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 调用网易“易盾” Web API
阅读量:6074 次
发布时间:2019-06-20

本文共 4015 字,大约阅读时间需要 13 分钟。

易盾是网易推出的反垃圾云服务,最近准备试用一下,但发现api文档中只提供了Java, Python, PHP的示例代码,却没有C#的示例代码,于是参照用C#实现了一下。

Java中用HashMap构建公共参数与私有参数,C#中则可以用Dictionary:

var parameters = new Dictionary
();//公共参数parameters.Add("secretId", "{secretId}");parameters.Add("businessId", "{businessId}");parameters.Add("version", "v2");parameters.Add("timestamp", CurrentTimeMillis().ToString());parameters.Add("nonce", new Random().Next().ToString());//私有参数parameters.Add("dataId", Guid.NewGuid().ToString());parameters.Add("content", content);parameters.Add("dataOpType", "1");parameters.Add("ip", ip);

Java中用 System.currentTimeMillis() 生成 timestamp,C#中没有直接的对应实现,只能另外实现一个(来自):

private long CurrentTimeMillis(){    return (long)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;}

对于生成签名的操作,Java中稍显复杂,C#中用Lambda一气呵成:

private string GenerateSignature(Dictionary
parameters, string secretKey){ var signatueString = string.Join(string.Empty, parameters.OrderBy(p => p.Key).Select(p => p.Key + p.Value)) + secretKey; return string.Join(string.Empty, MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(signatueString)).Select(s => s.ToString("x2")));}

对于http请求操作,Java中有HttpClient,C#中也有:

var response = await _httpClient.PostAsync("/v2/text/check",     new FormUrlEncodedContent(parameters));

对于响应结果解析,Java中有JsonParser,C#中有Json.NET:

var responseText = await response.Content.ReadAsStringAsync();var jObject = JObject.Parse(responseText);var statusCode = jObject["code"].Value
();if (statusCode == 200){ var action = jObject["result"]["action"].Value
(); return action == 1;}else{ return false;}

完整实现代码如下:

public class YiDunCheckSpam : ICheckSpam{    private const string BASE_ADDRESS = "https://api.aq.163.com/";    private readonly HttpClient _httpClient;    public YiDunCheckSpam()    {        _httpClient = new HttpClient();        _httpClient.BaseAddress = new Uri(BASE_ADDRESS);    }    public async Task
IsSpamPost(string title, string content, string author, string ip) { var parameters = new Dictionary
(); //公共参数 parameters.Add("secretId", "{secretId}"); parameters.Add("businessId", "{businessId}"); parameters.Add("version", "v2"); parameters.Add("timestamp", CurrentTimeMillis().ToString()); parameters.Add("nonce", new Random().Next().ToString()); //私有参数 parameters.Add("dataId", Guid.NewGuid().ToString()); parameters.Add("content", content); parameters.Add("dataOpType", "1"); parameters.Add("ip", ip); parameters.Add("title", title); parameters.Add("nickname", author); var secretKey = "{secretKey}"; var signature = GenerateSignature(parameters, secretKey); parameters.Add("signature", signature); var response = await _httpClient.PostAsync("/v2/text/check", new FormUrlEncodedContent(parameters)); var responseText = await response.Content.ReadAsStringAsync(); var jObject = JObject.Parse(responseText); var statusCode = jObject["code"].Value
(); if (statusCode == 200) { var action = jObject["result"]["action"].Value
(); return action > 1; } else { return false; } } private string GenerateSignature(Dictionary
parameters, string secretKey) { var signatueString = string.Join(string.Empty, parameters.OrderBy(p => p.Key).Select(p => p.Key + p.Value)) + secretKey; return string.Join(string.Empty, MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(signatueString)).Select(s => s.ToString("x2"))); } private long CurrentTimeMillis() { return (long)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds; }}

 

转载于:https://www.cnblogs.com/dudu/p/5419385.html

你可能感兴趣的文章
Android - toolbar navigation 样式
查看>>
谈谈HtmlControl与WebControl的区别与用途
查看>>
pyhon 函数2
查看>>
Integer类型数据比较大小问题:(Integer定义的是对象,养成使用equals方法的好习惯)...
查看>>
不同系统里同一Customizing activity的显示差异分析
查看>>
WSFC SQL应用磁盘阵列替换
查看>>
国内首款智能网联无人迷你巴士在东南大学首发试运行,车内没有配置方向盘...
查看>>
复习while,case,if,for及各种判断脚本
查看>>
VIM安装 NERDTREE,SOLARIZED 插件
查看>>
AD账户UserAccountControl对应的值
查看>>
Exchange server 2010安装(二)
查看>>
关于移动硬盘/U盘不能自动分配盘符问题
查看>>
部署redis主从高可用集群
查看>>
more
查看>>
红客专用电脑安全工具箱 v 1.9
查看>>
Script:诊断MTS shared server
查看>>
DNS主从服务器中域(zone)文件类型不一致问题的解决方法
查看>>
shell进阶
查看>>
图文解释XCode常用快捷键的使用
查看>>
超详细XP蓝屏代码大全
查看>>