C# 保存循环后要重用的令牌
我正在从事一个项目,在这个项目中,我一次只能从服务器返回30个结果。我在程序中使用一个循环来更改连接的参数,并使用下面的GetWorkers()命令返回每个循环后的下一个集合 我需要使用一个令牌来获取JObject.Parse(serverResponse)。我希望能够在每个循环中保存令牌以重用它,因为它在1小时后超时 我不确定在每个循环中保存令牌的最佳方式是什么。目前,执行整个过程需要30秒到1分钟,我希望在任何我能设法避免超时的地方都能缩短时间C# 保存循环后要重用的令牌,c#,token,server-response,C#,Token,Server Response,我正在从事一个项目,在这个项目中,我一次只能从服务器返回30个结果。我在程序中使用一个循环来更改连接的参数,并使用下面的GetWorkers()命令返回每个循环后的下一个集合 我需要使用一个令牌来获取JObject.Parse(serverResponse)。我希望能够在每个循环中保存令牌以重用它,因为它在1小时后超时 我不确定在每个循环中保存令牌的最佳方式是什么。目前,执行整个过程需要30秒到1分钟,我希望在任何我能设法避免超时的地方都能缩短时间 private ADPAccessToken
private ADPAccessToken GetAccessToken()
{
//var session = HttpContext.Current.Session;
////var session = Request.Properties["System.Web.HttpContex"] as HttpContextWrapper;
ADPAccessToken token = null;
//if (session["Token"] != null)
//{
// token = session["Token"] as ADPAccessToken;
// if (DateTime.Compare(DateTime.Now, token.ExpiresOn.Value) > 0)
// token = null;
//}
if (token == null)
{
//string formData = string.Concat("grant_type=client_credentials&scope=", HttpUtility.UrlEncode(accessScope));
string formData = string.Concat("grant_type=client_credentials");
var usrpwd = Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(string.Concat(NetworkUserName, ":", NetworkUserPassword)));
byte[] data = Encoding.ASCII.GetBytes(formData);
var result = postToADPServer(ADPAuthenticationURL, data, "Basic " + usrpwd);
if (!string.IsNullOrEmpty(result))
{
token = JsonConvert.DeserializeObject<ADPAccessToken>(result);
//session["Token"] = token;
}
}
return token;
}
public JObject GetWorkers()
{
return GetData(getWorkerURL);
}
private JObject GetData(string url)
{
ADPAccessToken token = GetAccessToken();
HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
var usrpwd = Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(token.TokenType + " " + token.AccessToken));
var serverResponse = postToADPServer(url, null, token.TokenType + " " + token.AccessToken, "application/json");
return JObject.Parse(serverResponse);
}
private string postToADPServer(string url, byte[] postData, string authorization, string contentType = null)
{
HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
X509Certificate2 certificate = new X509Certificate2(");
myHttpWebRequest.ClientCertificates.Add(certificate);
myHttpWebRequest.Headers.Add(HttpRequestHeader.Authorization, authorization);
if (postData != null)
{
if (!string.IsNullOrEmpty(contentType))
myHttpWebRequest.ContentType = contentType;
else
myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
myHttpWebRequest.Method = "POST";
myHttpWebRequest.ContentLength = postData.Length;
Stream requestStream = myHttpWebRequest.GetRequestStream();
requestStream.Write(postData, 0, postData.Length);
requestStream.Close();
}
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
Stream responseStream = myHttpWebResponse.GetResponseStream();
StreamReader myStreamReader = new StreamReader(responseStream, Encoding.Default);
string pageContent = myStreamReader.ReadToEnd();
myStreamReader.Close();
responseStream.Close();
myHttpWebResponse.Close();
return pageContent;
}
私有ADPAccessToken GetAccessToken()
{
//var session=HttpContext.Current.session;
////var session=Request.Properties[“System.Web.HttpContex”]作为HttpContextWrapper;
ADPAccessToken=null;
//if(会话[“令牌”]!=null)
//{
//令牌=会话[“令牌”]作为ADPAccessToken;
//if(DateTime.Compare(DateTime.Now,token.ExpiresOn.Value)>0)
//令牌=null;
//}
if(标记==null)
{
//string formData=string.Concat(“grant_type=client_credentials&scope=”,HttpUtility.UrlEncode(accessScope));
string formData=string.Concat(“授权类型=客户端凭据”);
var usrpwd=Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(string.Concat(NetworkUserName,“:”,NetworkUserPassword));
byte[]data=Encoding.ASCII.GetBytes(formData);
var result=postToADPServer(ADPAuthenticationURL,数据,“Basic”+usrpwd);
如果(!string.IsNullOrEmpty(结果))
{
token=JsonConvert.DeserializeObject(结果);
//会话[“令牌”]=令牌;
}
}
返回令牌;
}
公共工作人员()
{
返回GetData(getWorkerURL);
}
私有JObject GetData(字符串url)
{
ADPAccessToken=GetAccessToken();
HttpWebRequest myHttpWebRequest=(HttpWebRequest)HttpWebRequest.Create(url);
var usrpwd=Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(token.TokenType+“”+token.AccessToken));
var serverResponse=postToADPServer(url,null,token.TokenType+“”+token.AccessToken,“application/json”);
返回JObject.Parse(serverResponse);
}
私有字符串PostToAddServer(字符串url,字节[]postData,字符串授权,字符串contentType=null)
{
HttpWebRequest myHttpWebRequest=(HttpWebRequest)HttpWebRequest.Create(url);
X509Certificate2证书=新的X509Certificate2(“);
myHttpWebRequest.ClientCertificates.Add(证书);
myHttpWebRequest.Headers.Add(HttpRequestHeader.Authorization,Authorization);
if(postData!=null)
{
如果(!string.IsNullOrEmpty(contentType))
myHttpWebRequest.ContentType=ContentType;
其他的
myHttpWebRequest.ContentType=“application/x-www-form-urlencoded”;
myHttpWebRequest.Method=“POST”;
myHttpWebRequest.ContentLength=postData.Length;
Stream requestStream=myHttpWebRequest.GetRequestStream();
Write(postData,0,postData.Length);
requestStream.Close();
}
HttpWebResponse myHttpWebResponse=(HttpWebResponse)myHttpWebRequest.GetResponse();
Stream responseStream=myHttpWebResponse.GetResponseStream();
StreamReader myStreamReader=新的StreamReader(responseStream,Encoding.Default);
字符串pageContent=myStreamReader.ReadToEnd();
myStreamReader.Close();
responseStream.Close();
myHttpWebResponse.Close();
返回页面内容;
}
您不能将“ADPAccessToken=GetAccessToken();”移动到GetWorkers方法中,并将其作为参数传递到GetData吗?我如何将ADPAccessToken作为参数传递到GetData方法中?这不会仍然使令牌为空吗?