1

Я пытаюсь подключить мой asp.net REST api к salesforce. Я успешно прохожу через аутентификацию, но когда я начинаю посылать запросы POST, я получаю сообщение об ошибкеSalesforce rest api INVALID_SESSION_ID

{ «ERRORCODE»: «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 с тем же токеном из Simple Rest Client и получить ответ 200. Я попытался изменить заголовок «Authorization: Bearer» на «Авторизация: Oauth», но ничего не изменилось. Я также попытался поймать эту ошибку, получить токен обновления и отправить запрос снова с обновленным токеном, но ничего не изменилось. Пожалуйста, помогите мне с этим.

+0

Вы пытались перехватить оставшийся вызов api, который ваш код делает для salesforce. Вы видели фактическое содержание вызова api, созданного с помощью вашего кода? Это похоже на проблему с вашим файлом cookie. Либо токен не сохраняется в вашем файле cookie, либо вы не отправляете его в правильном формате. –

ответ

1

Ну, может быть, это немного поздно, но в любом случае. Проблема заключалась в том, что я добавил заголовки после содержимого. Когда я переключил эти строки кода - все сработало :)

1

Использование workbench Я смог отправить следующий JSON на адрес /services/data/v29.0/sobjects/Account и создать новую учетную запись.

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

Raw Response

HTTP/1.1 201 Создано
Дата: Вс, 7 сентября 2014 21:32:06 GMT
Set-Cookie: BrowserId = _HC-bzpTQABC1237vFu2hA; Путь = /; Домен = .salesforce.com; Expires = Thu, 06-Nov-2014 21:32:06 GMT
Истекает: Чт, 01 января 1970 00:00:00 GMT
Sforce-Limit-Info: api- использование = 209/15000
Расположение: /services/data/v29.0/sobjects/Account/0010000000000001AAA
Content-Type: применение/JSON; кодировка = UTF-8
Content-Encoding: GZIP
Transfer-Encoding: фрагментированное

{
"идентификатор": "0010000000000001AAA",
"успех": правда,
"ошибки": []
}

Вещи, чтобы проверить:

  1. Ваш адрес. Отображается, что отсутствует ведущий /services
  2. Действительно ли SFServerUrl тот же модуль/сервер Salesforce, на который был выдан идентификатор сеанса? Если Идентификатор сеанса пришел из другого модуля, это будет недействительным на na17.
  3. Как вы создали идентификатор сеанса? Если вы использовали OAuth, какие области вы запросили?
  4. Является ли идентификатор сеанса, выходящий из файла cookie, действительным?
  5. Есть ли что-то еще, использующее тот же идентификатор сеанса, который называется logout, и аннулировал сеанс?

Кстати, сайт Salesforce StackExchange - отличное место, чтобы задать конкретные вопросы Salesforce.

Смотрите также:

Смежные вопросы