我们正在尝试测试.Net 4.0控制台应用程序强制它使用TLS1.2并且我没有让它返回任何数据。
如果我使用Postman并在https://domainname.com/TestEndpoint/api/v1
上进行GET,那么我会得到一些简单的文本。
如果我在.Net 4控制台应用程序中使用以下代码并查看response.Content
,则数据为空。我在使用RestSharp做错了吗?
try
{
//https://domainname.com/TestEndpoint/api/v1
var endPoint = "https://domainname.com/";
var client = new RestClient(endPoint);
var request = new RestRequest("TestEndpoint/api/v1", Method.GET);
IRestResponse response = client.Execute(request);
var content = response.Content; // raw content as string
Console.WriteLine(response.Content);
}
catch (Exception ex)
{
logger.Error("Error: {0} | {1} | {2}", ex.Message, ex.StackTrace, ex.InnerException);
}
答案 0 :(得分:2)
根据我的理解,您的计算机上安装了.NET 4.5,但您的控制台应用程序的目标是.NET 4.0。
您需要使用的一行代码是:
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
如果没有该行,您对TLS 1.2端点的请求将失败(因为我知道您已经知道)。
我怀疑你的请求是静默失败的,并且没有触发catch块。如果您在Fiddler或其他流量监控软件中检查您的请求,您可能会看到来自服务器的响应,该响应说明了" SSL / TLS不兼容"的效果。 RestSharp可能在内部抑制任何异常,或者根本不抛出任何异常(取决于API调用响应的状态代码)。
Tl;博士鉴于我们在聊天中的对话,我知道你知道如何让它工作。观看Fiddler的流量将告诉您为什么失败。