我正在做一个项目,我一次只能从服务器返回 30 个结果。我在我的程序中使用一个循环来更改连接的参数,并使用下面的 GetWorkers() 命令在每个循环之后返回下一组。
我需要使用令牌来获取 JObject.Parse(serverResponse)。我希望能够在每个循环中保存令牌以重用它,因为它在 1 小时后超时。
我不确定在每个循环中保存令牌的最佳方法是什么。目前,执行整个过程需要 30 秒到 1 分钟,我希望它在我能设法避免任何超时的任何地方都更短。
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;
}