Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过HTTPS发布JSON_C#_Json_Web Services_Https - Fatal编程技术网

C# 通过HTTPS发布JSON

C# 通过HTTPS发布JSON,c#,json,web-services,https,C#,Json,Web Services,Https,在过去,我成功地通过HTTP调用了JSON Web服务 但是,现在我必须通过HTTPS发布JSON 我尝试过使用适用于HTTP的代码,并简单地将被调用的url更改为https,但它不起作用 这是我正在使用的代码 WebRequest wrGETURL; wrGETURL = WebRequest.Create("https://apitest.example.com/geo/coverage/v1/?appId=2644571&appKey=836621d715b6ce4db5f007d

在过去,我成功地通过HTTP调用了JSON Web服务 但是,现在我必须通过HTTPS发布JSON

我尝试过使用适用于HTTP的代码,并简单地将被调用的url更改为https,但它不起作用

这是我正在使用的代码

WebRequest wrGETURL;
wrGETURL = WebRequest.Create("https://apitest.example.com/geo/coverage/v1/?appId=2644571&appKey=836621d715b6ce4db5f007d8fa2214f");
wrGETURL.Method = "POST";
Stream objStream;
objStream = wrGETURL.GetResponse().GetResponseStream();
StreamReader objReader = new StreamReader(objStream);
string responseFromServer = objReader.ReadToEnd();
我在fiddler中看到的错误信息是:

fiddler.network.https>无法保护apitest.example.com的现有连接。调用SSPI失败,请参阅内部异常。InnerException:System.ComponentModel.Win32Exception(0x80004005):客户端和服务器无法通信,因为它们没有通用的算法


有人能帮我通过HTTPS打电话吗?

您需要验证服务器证书还是回拨服务器证书? 这在大多数情况下都适用于我:

        var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://someurl/");
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Method = "POST";

        // Create NetworkCredential Object 
        NetworkCredential admin_auth = new NetworkCredential("username", "password");

        // Set your HTTP credentials in your request header
        httpWebRequest.Credentials = admin_auth;

        // callback for handling server certificates
        ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {
            string json = "{\"name\":\"TEST_123\"}";
            streamWriter.Write(json); 
            streamWriter.Flush();
            streamWriter.Close();
            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                var result = streamReader.ReadToEnd();
                Console.WriteLine(result);
            }
       }

您是否需要对服务器证书进行身份验证或回调? 这在大多数情况下都适用于我:

        var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://someurl/");
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Method = "POST";

        // Create NetworkCredential Object 
        NetworkCredential admin_auth = new NetworkCredential("username", "password");

        // Set your HTTP credentials in your request header
        httpWebRequest.Credentials = admin_auth;

        // callback for handling server certificates
        ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {
            string json = "{\"name\":\"TEST_123\"}";
            streamWriter.Write(json); 
            streamWriter.Flush();
            streamWriter.Close();
            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                var result = streamReader.ReadToEnd();
                Console.WriteLine(result);
            }
       }

你能发布你的代码和你得到的错误吗。一个更好的问题+从我这里得到1。这似乎是一个真正的问题。现在,这不是因为它期望PUT(正如你在问题中提到的)而实际上你正在传递一个POST方法吗?@Ademar道歉-这是一个拼写错误。在这种情况下,应该是POST,而不是PUTING。你是否尝试过这样做你的请求:你能发布你的代码和你得到的错误吗?否决票被撤销。一个更好的问题+从我这里得到1。这似乎是一个真正的问题。现在,这不是因为它期望PUT(正如你在问题中提到的)而实际上你正在传递一个POST方法吗?@Ademar道歉-这是一个拼写错误。在这种情况下,应该是POST,而不是PUTIn。您是否尝试过这样做您的请求:更不用说,进行某种证书验证是适当的,只是为了确保我们连接到我们认为是的服务器。否则,该代码也将接受任何证书,从而允许MITM攻击:PNot提到,进行某种证书验证是合适的,只是为了确保我们连接到我们认为是的服务器。否则,该代码也将接受任何证书,从而允许MITM攻击:P