要求C#语言在微博service接口中使用content-type:multiparty/form-data属性,上传csv文件,且头部添加bear格式的jwt鉴权。实现通过接口完成批量数据的传输及同步。
//全局变量
public string urlHost=“”;
#region 主函数
[WebMethod(Description="连通性测试")]
public void TestBatch()
{
urlHost="http://22.22.22.22.:8089/tencent";
if(!string.IsNullOrEmpty(urlHost))
{
//根目录
string departID = "tt-6e4rrtty4579dsfs96";
//urlHost 访问地址的接口地址
urlHost+=string.Format(@"/api/v"+departID +"/obj?obj=user");
#region 创建文件
DateTime dt = DateTime.Now;
string TencentBatch=ConfigurationManager.AppSettings["mulu1"];
string headPath=ConfigurationManager.AppSettings["mulu2"];
string middlePath=TencentBatch+dt.Year+"/"+(dt.Month<10?"0":"")+dt.Month+"/"+(dt.Day<10?"0":"")+dt.Day+"/";
if(!System.IO.Directory.Exists(headPath+middlePath.Replace("/","\")))
{
Directory.CreateDirectory(headPath+middlePath.Replace("/","\"));
}
//eg:D:\测试文件夹\测试1\测试22022 122aa_1_1.csv
string path = headPath+middlePath.Replace("/","\")+"aa_1_1.csv";
int pos=path.LastIndexOf("\");
string fileName=path.Substring(pos+1);
string firstLine=string.Format(@"id,modifiedOn");
//tchModel上送模板的列明,
List
tchModel tmbm = new tchModel();
tmbm .id="id2";
tmbm .modifiedOn="2022/02/02";
lt.Add(tmbm);
bool bl=WriteFile
#endregion
//自定义请求方式
HttpRequestMessage requestMessage=new HttpRequestMessage();
requestMessage.Method = HttpMethod.Put;
requestMessage.RequestUri = new Uri(urlHost);
//1.数据流存入
Stream fileStream=new FileStream(path,FileMode.Open,FileAccess.Read);
var formData=new MultipartFormDataContent();
formData.Add(new StreamContent(fileStream),"file",fileName);
requestMessage.Content=formData;
HttpClient client = new HttpClient();
var authenticationHeaderValue = new AuthenticationHeaderValue("Bearer",GetToken());
client.DefaultRequestHeaders.Authorization = authenticationHeaderValue;
client.DefaultRequestHeaders.Add("CharSet","utf-8");
HttpResponseMessage result = client.SendAsync(requestMessage).Result;
string responseResult = result.Content.ReadAsStringAsync().Result;
client.Dispose();
fileStream.Close();
try{
if(result.IsSuccessStatusCode)
{
string r=result.Content.ReadAsStringAsync().Result;
Context.Response.Write(r);
}
}finally{
fileStream.Close();
client.Dispose();
}
}
}
#endregion
//====================生成文件===================
public static bool WriteFile
{
bool flag = false;
try{
if(File.Exists(fileName))
{
File.Delete(fileName);
}
using(FileStream fs=new FileStream(fileName,FileMode.Create))
{
//指定Encodeing.UTF8,避免生成的文件乱码
using(StreamWriter sw = new StreamWriter(fs,Encodeing.UTF8))
{
string info Line= string.Empty;
sw.WriteLine(firstLine);
foreach(var item in dataTable)
{
infoLine +=",,";
}
sw.Close();
}
fs.Close();
}
}
}
//-----生成J问题Token---
public string Get Token()
{
var headers = new Dictionary
{"type","JWT"},
{"kid","58888888-8888-8888-8888-888888888888"}
};
long iat =(long)DateTime.Now.ToUniversalTime().Subtract(new DateTime(1970,1,1)).TotalSeconds;
long exp =(long)DateTime.Now.AddMinutes(1.0).ToUniversalTime().Subtract(new DateTime(1970,1,1)).TotalSeconds;
var claims = new Dictionary
{
{"aud","test"},
{"iss","22222222-2222-2222-2222-222222222222"},
{"iat",iat},
{"exp",exp},
{"accounttype","serviceA"}
};
//需要通过pem实例化[RS256算法,需要实例化RSAParameters ]
RSACryptoServiceProvider privateKey;
string path=HttpContext.Current.Server.MapPath("~/"+"test-pri.pem");
StreamReader reader =new StreamReader(path);
PemReader pemReader = new PemReader(reader);
AsymmetricCipherKeyPair keyPair = (AsymmetricCipherKeyPair)pemReader.ReadObject();
RSAParameters rsaParameters=DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters)keyPair.Private);
privateKey = new RSACryptoServiceProvider();
privateKey.ImportParameters(rsaParameters);
var token=Jose.JWT.Encode(claims,privateKey,Jose.JwsAlgorithm.RS256,extraHeaders:headers);
return token;
}



