2014-09-06 125 views
1

我試圖將我的asp.net REST api連接到salesforce。我成功地通過認證,然而當我開始發送POST請求,我得到一個錯誤Salesforce休息api INVALID_SESSION_ID

{「錯誤碼」:「INVALID_SESSION_ID」,「消息」:「會話過期或無效」}

這裏是我的POST請求:

//SFServerUrl = "https://na17.salesforce.com/services/"; 
    //url = "data/v28.0/sobjects/Account"; 

      ASCIIEncoding ascii = new ASCIIEncoding(); 
      byte[] postBytes = ascii.GetBytes(postBody); 
      HttpWebRequest request = WebRequest.Create(Globals.SFServerUrl + url) as HttpWebRequest; 
      request.Method = "POST"; 
      request.ContentType = "application/json"; 
      request.ContentLength = postBytes.Length; 
      Stream postStream = request.GetRequestStream(); 
      postStream.Write(postBytes, 0, postBytes.Length); 

      HttpCookie cookie = HttpContext.Current.Request.Cookies[Globals.SFCookie]; 
      var ticket = FormsAuthentication.Decrypt(cookie.Value); 
      string authToken = ticket.UserData; 
      request.Headers.Add("Authorization", "Bearer " + authToken); 
      postStream.Close(); 

      HttpWebResponse response = request.GetResponse() as HttpWebResponse; 
      StringBuilder sb = new StringBuilder(); 
      byte[] buf = new byte[8192]; 
      Stream resStream = response.GetResponseStream(); 
      string tempString = null; 
      int count = 0; 
      do 
      { 
       count = resStream.Read(buf, 0, buf.Length); 
       if (count != 0) 
       { 
        tempString = Encoding.ASCII.GetString(buf, 0, count); 
        sb.Append(tempString); 
       } 
      } 
      while (count > 0); 
      return new Tuple<bool, string>(true, sb.ToString()); 

當我試圖發送GET請求 - 我收到200響應。 此外,我試圖從簡單的休息客戶端發送一個POST請求與相同的令牌,它得到的200響應。我試圖將我的「授權:持票人」標題更改爲「授權:Oauth」,但沒有任何更改。我也嘗試捕獲這個錯誤,獲取刷新標記並使用刷新的標記再次發送請求,但沒有任何更改。請在這件事上給予我幫助。

+0

您是否嘗試攔截其餘api調用您的代碼正在向salesforce進行調用。你有沒有看到通過你的代碼完成的API調用的實際內容?它看起來像你的cookie的問題。標記不會保存在您的Cookie中,或者您沒有以正確的格式發送它。 – 2014-09-06 13:14:40

回答

1

好吧,也許這是一個有點晚,但無論如何。問題是我在內容之後添加了標題。當我切換這些代碼行 - 一切正常:)

1

使用workbench我能夠發佈以下JSON到/services/data/v29.0/sobjects/Account並創建一個新帳戶。

{ 
    "Name" : "Express Logistics and Transport" 
} 

原始響應

HTTP/1.1 201創建
日期:星期日,2014年9月7日21時32分06秒GMT
的Set-Cookie:BROWSERID = _HC-bzpTQABC1237vFu2hA;路徑= /; Domain = .salesforce.com; Expires = Thu,06-Nov-2014 21:32:06 GMT
Expires:Thu,01 Jan 1970 00:00:00 GMT
Sforce-Limit-Info:api-用法= 209/15000
位置:/services/data/v29.0/sobjects/Account/0010000000000001AAA
內容類型:應用/ JSON;字符集= UTF-8
內容編碼:gzip
傳輸編碼:分塊

{
「ID」: 「0010000000000001AAA」,
「成功」:真實,
「錯誤」:[]
}

檢查事項:

  1. 您的網址。它似乎缺少領先的/services
  2. 是否SFServerUrl與會話ID頒發給的Salesforce pod/server相同?如果Session ID來自另一個Pod,那麼它將在na17上無效。
  3. 你是如何創建Session ID的?如果您使用OAuth,您請求了哪些範圍?
  4. 會話ID是否來自cookie有效?
  5. 還有其他使用相同的會話ID稱爲註銷並使會話無效?

順便提一句,Salesforce StackExchange網站是詢問Salesforce特定問題的好地方。

參見: