2017-05-29 56 views
1

我试图消耗REST API和我有,这让我发疯了一个问题...奇怪的错误使用400到HttpRequest的消费REST API

我创建了一个DLL来包装服务消费层,我发现如果我使用c#交互式功能使用它的服务,它工作正常。

的问题是,当我尝试从另一个DLL消费它,它正在执行的GetResponse()

执行的代码是...

var url = $"{_salesForceInstance}/services/data/{_salesForceVersion}/query/?q=SELECT+Id,Name,AccountId+from+Contact+WHERE+Email+=+'{email}'"; 
      var webRequest = (HttpWebRequest)WebRequest.Create(url); 
      webRequest.ServicePoint.CloseConnectionGroup(webRequest.ConnectionGroupName); 
      webRequest.Method = "GET"; 
      webRequest.ContentType = "application/json"; 
      webRequest.Headers.Add("Authorization", $"Bearer {_authorizationToken}"); 
      var webResponse = webRequest.GetResponse() as HttpWebResponse; 

的时候我也调试时抛出错误请求异常代码,通过邮递员发送相同,它工作正常...

任何想法?我在这一点上为什么费时从C#的互动而不是从另一个DLL的DLL时,作品相当沮丧...

+1

因此,打开[Fiddler](http://www.telerik.com/fiddler)的副本并确保请求确实匹配。他们几乎肯定不会。 – spender

+0

谢谢!这有帮助! – federom

+0

我试过用Wireshark ..但是我没有发现任何东西......看起来问题与TLS版本有关 – federom

回答

1

随着富豪建议我试图与小提琴手......

我发现,尽管事实这两个请求看起来是相同的(来自c#interactive和来自控制台应用程序的请求),在返回HTTP 400错误代码的响应中包含以下消息

“[{”message“:”TLS 1.0在此组织中已被禁用。请使用TLS 1.1或更高版本连接到Salesforce使用HTTPS时“”错误码“:” UNSUPPORTED_CLIENT“}]”

调试时,该消息不会出现......

最后我通过包括线解决描述在我的代码为了使用TLS 1.2

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 

现在它的工作!

希望这可以帮助别人!

谢谢!