首页 > 编程语言 >.net 对接极兔平台 java Base64与.net Base64数据不一致及POST 带header 和body 参数的处理

.net 对接极兔平台 java Base64与.net Base64数据不一致及POST 带header 和body 参数的处理

时间:2023-01-31 20:11:06浏览次数:38  
标签:body string postData Base64 dem var net

近几天对接极兔平台,遇到java Base64与.net Base64数据不一致及POST 带header 和body 参数的问题,费了一些周折,现在记录下来,供大家参考。

1. java Base64与.net Base64数据不一致。

 

 

在网上找了很多,都不对症,直到看到这篇:https://blog.csdn.net/weixin_42358173/article/details/114072001

原来如此简单:Convert.ToBase64String(字节数组.)即可

public static string JavaMD5ToBase64String(string input)
{
//Java,将数据直接放入字节数组,.NET中,不要使用String,使用字节数组.
var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
var md5Byte = md5.ComputeHash(Encoding.UTF8.GetBytes(input));
return Convert.ToBase64String(md5Byte);
}

2.POST 带header 和body 

 

 

网上找了不少资料,都不对症,但给了启发,直接上码:

public static string DoPost(string url, IDictionary<string, string> bodyParameters, IDictionary<string, string> headerParameters = null)
{
try
{
HttpWebRequest req = GetWebRequest(url, "POST");
req.ContentType = "application/x-www-form-urlencoded";
if (headerParameters != null)
{
IEnumerator<KeyValuePair<string, string>> dem = headerParameters.GetEnumerator();
while (dem.MoveNext())
{
req.Headers.Add(dem.Current.Key, dem.Current.Value);
}
}
byte[] postData = Encoding.UTF8.GetBytes(BuildQuery(bodyParameters));
Stream reqStream = req.GetRequestStream();
reqStream.Write(postData, 0, postData.Length);
reqStream.Close();

HttpWebResponse rsp = (HttpWebResponse)req.GetResponse();
Encoding encoding = Encoding.GetEncoding("utf-8");
var result = GetResponseAsString(rsp, encoding);
return result;
}
catch (Exception e)
{
throw e;
}
}

 

public static string BuildQuery(IDictionary<string, string> parameters)
{
StringBuilder postData = new StringBuilder();
bool hasParam = false;

IEnumerator<KeyValuePair<string, string>> dem = parameters.GetEnumerator();
while (dem.MoveNext())
{
string name = dem.Current.Key;
string value = dem.Current.Value;
// 忽略参数名或参数值为空的参数
if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(value))
{
if (hasParam)
{
postData.Append("&");
}
postData.Append(name);
postData.Append("=");
StringBuilder builder = new StringBuilder();
postData.Append(HttpUtility.UrlEncode(value, Encoding.UTF8));
hasParam = true;
}
}

return postData.ToString();
}

 

方法调用:

var headerParameters = new Dictionary<string, string>
{
{"apiAccount", apiAccount} , 
{"digest", digest},
{"timestamp",timestamp}
};

var bodyParameters = new Dictionary<string, string>
{
{"bizContent", responseJson }
};

 

  var result = DoPost(r, bodyParameters, headerParameters);

 

标签:body,string,postData,Base64,dem,var,net
From: https://www.cnblogs.com/Kylinhe/p/17080423.html

相关文章

  • NET 实现 Cron 定时任务执行,告别第三方组件
    原文连接:(96条消息)NET实现Cron定时任务执行,告别第三方组件_.net定时任务_PhilArist的博客-CSDN博客 代码:usingSystem.Globalization;usingSystem.Text;us......
  • net5 发布到ISS报错500.19
    net5发布到ISS报错500.19“处理程序“aspNetCore”在其模块列表中有一个错误模块“AspNetCoreModule2” 重新安装了aspnetcore-runtime-5.0.17-win-x64.exedotnet-s......
  • 第13章 MVC和Razor Pages过滤器管道(ASP.NET Core in Action, 2nd Edition)
    本章包括过滤器管道及其与中间件的区别创建自定义筛选器以重构复杂的操作方法使用授权筛选器保护您的操作方法和Razor页面短路筛选器管道以绕过操作和页面处理程序执......
  • .Net6 使用 Ocelot + Consul 看这篇就够了
    前言卯兔敲门,新的一年,祝大家前‘兔’似锦!希望大家假后还能找到公司的大门O(∩_∩)O!书接上文,我们使用了Consul实现了服务注册与发现,对Consul不熟悉的同学可以先看看。......
  • kubernetes get pods 跟踪
    之前重启pods的时候总是不停的敲sudokubectlgetpods,今天发现居然有watch功能,太方便了,记录一下sudokubectlgetpods-w-lapp=zk-owide-w就是watch的意思-lap......
  • kubernetes affnity亲和力研究
    1.官方文档https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity2.亲和性与反亲和性 亲和性和反亲和性扩......
  • 部署Kubernetes Cluster
      安装方法kubernetes二进制安装(配置最繁琐,不亚于安装openstack)kubeadm安装(谷歌推出的自动化安装工具,网络有要求)minikube安装(仅仅用来体验k8s)yum安......
  • .NET Core 实现 Redis 批量查询指定格式的Key
    .NETCore实现Redis批量查询指定格式的Key 一.问题场景#Redis作为当前最流行的内存型NoSQL数据库,被许多公司所使用,作为分布式缓存。我们在实际使用中一般都会......
  • OnionArch-NorthwindTraders,sample-dotnet-core-cqrs-api
    NorthwindTraders, sample-dotnet-core-cqrs-api 项目OnionArch-采用DDD+CQRS+.Net7.0实现的洋葱架构 博主最近失业在家,找工作之余,看了一些关于洋葱(整洁)架构的资......
  • .net core 下使用 Kafka 生产者批量发送给消息处理,使用事务(四)
    生产者批量发送消息,使用事务,要么全部失败要么全部成功重要说明事物id必须要设置producerConfig.TransactionalId=Guid.NewGuid().ToString();//必须设置事物id 1......