C# 不返回任何数据?

C# 不返回任何数据?,c#,rest,restsharp,C#,Rest,Restsharp,我们正在尝试测试一个.NET4.0控制台应用程序,强制它使用TLS1.2,但我不让它返回任何数据 如果我使用邮递员,并进行一次快速登录https://domainname.com/TestEndpoint/api/v1然后我得到了一些应该返回的简单文本 如果我在.Net 4控制台应用程序中使用以下代码并查看response.Content,则数据为空。我对RestSharp做了什么不正确的事情吗 try { //https://domainname.com/TestEndpoint/ap

我们正在尝试测试一个.NET4.0控制台应用程序,强制它使用TLS1.2,但我不让它返回任何数据

如果我使用邮递员,并进行一次快速登录
https://domainname.com/TestEndpoint/api/v1
然后我得到了一些应该返回的简单文本

如果我在.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);
}

据我所知,您的计算机上安装了.NET 4.5,但您的控制台应用程序的目标是.NET 4.0

要使其正常工作,您需要的一行代码是:

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
如果没有该行,您对TLS1.2端点的请求将失败(我知道您已经知道)

我怀疑您的请求正在悄悄地失败,并且没有触发catch块。如果您在Fiddler或其他流量监控软件中检查您的请求,您可能会看到服务器返回的响应,该响应表示“SSL/TLS不兼容”。RestSharp可能在内部抑制任何异常,或者根本不抛出异常(取决于API调用响应的状态代码)


Tl;dr鉴于我们在聊天中的对话,我知道你知道如何让它发挥作用。观察Fiddler中的流量会告诉您它失败的原因。

据我所知,您的计算机上安装了.NET 4.5,但您的控制台应用程序的目标是.NET 4.0

要使其正常工作,您需要的一行代码是:

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
如果没有该行,您对TLS1.2端点的请求将失败(我知道您已经知道)

我怀疑您的请求正在悄悄地失败,并且没有触发catch块。如果您在Fiddler或其他流量监控软件中检查您的请求,您可能会看到服务器返回的响应,该响应表示“SSL/TLS不兼容”。RestSharp可能在内部抑制任何异常,或者根本不抛出异常(取决于API调用响应的状态代码)


Tl;dr鉴于我们在聊天中的对话,我知道你知道如何让它发挥作用。观察Fiddler中的流量将告诉您它失败的原因。

TLS 1.2在.NET 4.0中不受官方支持。但是,如果您的计算机上安装了.NET 4.5,并且您的项目仍然以4.0为目标,那么就有一个解决方法。这提供了一些非常有用的信息是的,这就是我们要测试的。我们有一些4.0应用程序安装在4.5的服务器上,我们想要一个简单的控制台应用程序,它将首先失败,然后我们对注册表进行更改,希望它能正常工作。为了全面测试这一点,我正在尝试在4.0中编写一个简单的控制台应用程序以及一个强制TLS1.2的简单API。然后,您只需添加以下行:
ServicePointManager.SecurityProtocol=(SecurityProtocolType)3072这就是4.0与TLS 1.2兼容的诀窍。首先,我希望它失败,然后我将添加该行,并希望看到是否成功,但我无法让代码在我的本地机器上返回任何支持TLS 1.2的内容。最终,我得到了它。我必须查看返回的响应对象。然后我可以看到错误消息。在我的本地机器(Win7)上,它只是说它无法打开连接。然后我把它放在Server2012机器上,得到了关于无法建立SSL/TLS连接的更好消息。然后,我可以测试添加ServicePointManager以查看其工作,然后测试注册表设置以使其工作。TLS 1.2在.NET 4.0中不受正式支持。但是,如果您的计算机上安装了.NET 4.5,并且您的项目仍然以4.0为目标,那么就有一个解决方法。这提供了一些非常有用的信息是的,这就是我们要测试的。我们有一些4.0应用程序安装在4.5的服务器上,我们想要一个简单的控制台应用程序,它将首先失败,然后我们对注册表进行更改,希望它能正常工作。为了全面测试这一点,我正在尝试在4.0中编写一个简单的控制台应用程序以及一个强制TLS1.2的简单API。然后,您只需添加以下行:
ServicePointManager.SecurityProtocol=(SecurityProtocolType)3072这就是4.0与TLS 1.2兼容的诀窍。首先,我希望它失败,然后我将添加该行,并希望看到是否成功,但我无法让代码在我的本地机器上返回任何支持TLS 1.2的内容。最终,我得到了它。我必须查看返回的响应对象。然后我可以看到错误消息。在我的本地机器(Win7)上,它只是说它无法打开连接。然后我把它放在Server2012机器上,得到了关于无法建立SSL/TLS连接的更好消息。然后,我可以测试添加ServicePointManager以查看其工作情况,然后测试注册表设置以使其工作。我对Fiddler的经验有限,但我无法让它显示任何流量。如果我去一个网站,我可以看到流量,但在本地运行我的控制台应用程序时什么也看不到。我打赌我在某个地方有一个设置使我看不到流量。因为你使用https,你必须配置Fiddler来解密https流量。我知道这已经有一年多的历史了,但这是我在网上找到的唯一有效的解决方案。荣誉我对Fiddler的经验有限,但我无法让它显示任何流量。如果我去一个网站,我可以看到流量,但在本地运行我的控制台应用程序时什么也看不到。我打赌我在某个地方有一个设置使我看不到流量。因为你使用https,你必须配置Fiddler来解密https流量。我知道这已经有一年多的历史了,但这是我在网上找到的唯一有效的解决方案。荣誉