Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.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# 如何捕获RESTAPI在请求后发送的响应令牌?_C#_Rest_Http Post_Access Token - Fatal编程技术网

C# 如何捕获RESTAPI在请求后发送的响应令牌?

C# 如何捕获RESTAPI在请求后发送的响应令牌?,c#,rest,http-post,access-token,C#,Rest,Http Post,Access Token,我正在使用REST API,并使用基本身份验证,其中密码编码为Base64,如下所示 private XmlDocument sendXMLRequest(string requestXml) { string destinationUrl = "https://serviceapi.testgroup.com/testtp/query"; HttpWebRequest request = (HttpWebRequest)WebRequest.Crea

我正在使用REST API,并使用基本身份验证,其中密码编码为Base64,如下所示

 private XmlDocument sendXMLRequest(string requestXml)
    {
        string destinationUrl = "https://serviceapi.testgroup.com/testtp/query";

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(destinationUrl);
        request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("API_TEST_NR:Testnol1$"));
        byte[] bytes;
        bytes = System.Text.Encoding.ASCII.GetBytes(requestXml);
        request.Method = "POST";

        request.ContentLength = bytes.Length;
        //request.Connection = "keep-alive";
        request.ContentType = "text/xml";
        request.KeepAlive = true;
        request.Timeout = 2000;
        request.MediaType = "text/xml";
        Stream requestStream = request.GetRequestStream();
        requestStream.Write(bytes, 0, bytes.Length);
        requestStream.Close();
        HttpWebResponse response;
        Stream responseStream;

        using (response = (HttpWebResponse)request.GetResponse())
        {
            if (response.StatusCode == HttpStatusCode.OK)
            {
                responseStream = response.GetResponseStream();
                XmlReader reader = new XmlTextReader(responseStream);

                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(reader);


                try { reader.Close(); }
                catch { }
                try { responseStream.Close(); }
                catch { }
                try { response.Close(); }
                catch { }
                return xmlDoc;
            }
        }
        try { response.Close(); }
        catch { }
        return null;
    } 
我对使用Web Api有点陌生,我知道Api在基于Api文档成功授权后会使用access x-token进行响应,我不确定如何从HTTP头访问或捕获它


我可以知道一个好方法来实现这一点吗?这比我想象的简单,只是用它的名字

string xtoken= response.Headers["custom-header"];
Console.WriteLine(xtoken);

尝试如下操作,表示使用WebRequest类请求数据。在大多数情况下,WebRequest类足以接收数据。但是,如果需要设置特定于协议的属性,则必须将WebRequest强制转换为特定于协议的类型。例如,要访问HttpWebRequest的HTTP特定属性,请将WebRequest强制转换为HttpWebRequest引用

private XmlDocument GetRootLevelServiceDocument(
string serviceEndPoint, string oAuthToken)
{
XmlDocument xmlDoc = new XmlDocument();
HttpWebRequest request = CreateHttpRequest(serviceEndPoint, 
    oAuthToken);

using (HttpWebResponse response = 
    (HttpWebResponse)request.GetResponse())
{
    using (XmlReader reader = 
        XmlReader.Create(response.GetResponseStream(), 
        new XmlReaderSettings() { CloseInput = true }))
    {
        xmlDoc.Load(reader);

        string data = ReadResponse(response);
        if (response.StatusCode != HttpStatusCode.OK)
        {
            LogMsg(string.Format("Error: {0}", data));
            LogMsg(string.Format(
                "Unexpected status code returned: {0}", 
                response.StatusCode));
        }
    }
}

return xmlDoc;
}
为什么OP要“试试这个”?一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客。