System.dll中出现“System.Net.WebException”类型的异常,但未在用户代码中处理

时间:2014-01-06 11:06:57

标签: asp.net salesforce visual-studio-2013

我正在尝试从visual studio访问Salesforce数据。但代码返回上述异常。 我的班级文件如下。

     public string HttpPost(string URI, string Parameters)
        {
            System.Net.WebRequest req = System.Net.WebRequest.Create(URI);
            req.ContentType = "application/x-www-form-urlencoded";
            req.Method = "POST";

            // Add parameters to post
            byte[] data = System.Text.Encoding.ASCII.GetBytes(Parameters);
            req.ContentLength = data.Length;
            System.IO.Stream os = req.GetRequestStream();
            os.Write(data, 0, data.Length);
            os.Close();

            // Do the post and get the response.
             **System.Net.WebResponse resp = req.GetResponse();**
                if (resp == null) return null;
                System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
                return sr.ReadToEnd().Trim();
 }

我正在尝试调用POST方法从salesforce中检索令牌。 '**'括起来的语句会抛出异常。

  

远程服务器返回错误:(400)错误请求。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

您尝试向Salesforce发布的数据或使用的网址一点也不清楚。这是您尝试将数据提交到web 2 lead的自定义Web服务吗?

将Salesforce与.NET集成的一种相当标准的方法是通过Partner API or the Enterprise API。这些通常是很好的起点,并定义了可以作为Web引用导入Visual Studio项目的WSDL。

还有各种REST apis。由于您要发布到

  

“login.salesforce.com/services/oauth2/token”

我假设您正在使用Web Server OAuth 2 Authentication Flow并且您拥有现在用于请求访问令牌的授权码。

您发布到此URL的参数应类似于(注意,这直接来自Salesforce数据,因此它不应包含任何敏感信息):

  

<强> grant_type = authorization_code&安培;的 = aPrxsmIEeqM9PiQroGEWx1UiMQd95_5JUZ   VEhsOFhS8EVvbfYBBJli2W5fn3zbo.8hojaNW_1g%3D%3D&安培;的的client_id = 3MVG9lKcPoNI   NVBIPJjdw1J9LLM82HnFVVX19KY1uA5mu0QqEWhqKpoW3svG3XHrXDiCQjK1mdgAvhCs   cA9GE&安培;的 client_secret = 1955279925675241571&安培;   的 REDIRECT_URI = HTTPS%3A%2F%2Fwww.mysite.com%2Fcode_callback.jsp

您将需要使用Salesforce在上一步中返回给您的授权代码以及您自己的client_id和client_secret。您也可以根据需要设置redirect_uri。


使用用户名和密码建立REST连接:Understanding the Username-Password OAuth Authentication Flow

您需要将grant_type设置为password并提供用户名和密码。这应该发布到https://login.salesforce.com/services/oauth2/token

  

<强> grant_type =&密码放大器;的的client_id = 3MVG9lKcPoNINVBIPJjdw1J9LLM82Hn   FVVX19KY1uA5mu0QqEWhqKpoW3svG3XHrXDiCQjK1mdgAvhCscA9GE&安培;的 client_secret =   1955279925675241571&安培;的用户名 = TESTUSER%40salesforce.com&安培; 密码 = mypassword123456

然后,您可以从回复中获取access_token