2013-06-12 67 views
0

嘗試發送JSON的HttpRequest到SFDC Web服務時,得到如下回應:傳遞登錄信息發送的HttpRequest到SFDC Web服務

[1] 
0: { 
message: "Session expired or invalid" 
errorCode: "INVALID_SESSION_ID" 
} 

如何正確地傳遞會話ID或LoginResult與HttpRequest的另一個信息?代碼示例如下:

// Generate JSON 
    MyClass object = new MyClass(); 
    string post_data = JsonSerializer.SerializeToString(object); // this is what we are sending 

    // this is where we will send it 
    string uri = "https://url.salesforce.com/some_path/"; 

    // create a request 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); 
    request.KeepAlive = false; 
    request.Method = "POST"; 
    byte[] postBytes = Encoding.ASCII.GetBytes(post_data); 
    request.ContentType = "application/json"; 
    request.ContentLength = postBytes.Length; 

    // Setup proxy and SFDC login 
    LoginResult result = SfdcConnection.GetLoginResult(); 
    // ------------ Need to add login info here ----------------- 

    // now send it 
    Stream requestStream = request.GetRequestStream(); 
    requestStream.Write(postBytes, 0, postBytes.Length); 
    requestStream.Close(); 

    // grab te response and print it out to the console along with the status code 
    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    string jsonResponse = new StreamReader(response.GetResponseStream()).ReadToEnd(); 
+0

它將取決於您試圖調用哪個api,請求的實際url是什麼? – superfell

+0

對不起,沒提 - REST –

+0

找到了一些文檔,似乎需要先發送auth請求。 –

回答

1

你需要傳遞的SessionID在Authorization頭,使用OAuth的模式,所以它會是

request.Headers.Add("Authorization", "Bearer " + result.sessionId); 

sessionId可用一段時間,所以只需調用一次login,而不是在每個REST API調用之前。

這涵蓋在REST API docs更詳細。

+0

謝謝,這個工程。 –

0

您需要連接LoginResult(其中最有可能包含會話ID),您的要求,否則,Web服務只是認爲沒有會話ID的請求(沒有cookie,也許是)並且沒有驗證您是在登錄客戶端的方式。

LoginResult result = SfdcConnection.GetLoginResult(); 
// attach sesionId to your request, see the web services documentation for this 
request.Headers.Add("sessionId", result.sessionId); 
+0

「sessionId」 - 這是正確的拼寫,大小寫,名字? –

+0

亞nee znayu阿列克謝,我只是使用「sessionId」作爲默認值。您需要查看API文檔以獲取正確的命名。 –

+0

不起作用:遠程服務器返回錯誤:(401)未經授權。 –