Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 保存循环后要重用的令牌_C#_Token_Server Response - Fatal编程技术网

C# 保存循环后要重用的令牌

C# 保存循环后要重用的令牌,c#,token,server-response,C#,Token,Server Response,我正在从事一个项目,在这个项目中,我一次只能从服务器返回30个结果。我在程序中使用一个循环来更改连接的参数,并使用下面的GetWorkers()命令返回每个循环后的下一个集合 我需要使用一个令牌来获取JObject.Parse(serverResponse)。我希望能够在每个循环中保存令牌以重用它,因为它在1小时后超时 我不确定在每个循环中保存令牌的最佳方式是什么。目前,执行整个过程需要30秒到1分钟,我希望在任何我能设法避免超时的地方都能缩短时间 private ADPAccessToken

我正在从事一个项目,在这个项目中,我一次只能从服务器返回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;
    }
私有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方法中?这不会仍然使令牌为空吗?