【问题标题】:How to capture a response token sent by a REST API after a request?如何在请求后捕获 REST API 发送的响应令牌?
【发布时间】:2015-09-18 20:38:23
【问题描述】:

我正在使用 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 文档成功授权后会使用访问 x-token 进行响应,我不确定如何从 HTTP 标头访问或捕获它.

我可以知道实现此目的的好方法吗?

【问题讨论】:

    标签: c# rest http-post access-token


    【解决方案1】:

    这比我想象的用它的名字捕获要容易。

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

    【讨论】:

      【解决方案2】:

      尝试如下,表示,使用 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,而且适用于 SO 的未来访问者。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 2013-02-06
      • 2022-01-06
      • 1970-01-01
      • 2017-11-22
      • 1970-01-01
      相关资源
      最近更新 更多