【问题标题】:Sending post request to REST over SSL in json from C#从 C# 在 json 中通过 SSL 向 REST 发送 post 请求
【发布时间】:2016-11-22 09:49:59
【问题描述】:

我在谷歌上查了每一页都没有明确的答案 现在这是我的代码:

try
{
    var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://api.hesabit.com/oauth2/token");
    httpWebRequest.ContentType = "application/json";
    httpWebRequest.Method = "POST";
    httpWebRequest.Credentials = CredentialCache.DefaultCredentials;
    ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);

    string result_st;

    using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
    {
        string json = "{\"code\":\"{atho code}\"," +
                       "\"grant_type\":\"authorization_code\"," +
                       "\"client_id\":\"{client_id}\"," +
                       "\"client_secret\":\"{client_secret}\"," +
                       "\"redirect_uri\":\"{redirect_uri}\"}";
        streamWriter.Write(json);
        streamWriter.Flush();
        streamWriter.Close();
    }

    var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

    using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
    {
        var result = streamReader.ReadToEnd();
        result_st = result;
    }

    return result_st;
}
catch (Exception ex)
{
    return ex.ToString();
}

【问题讨论】:

  • Google 有 大量页面描述了您想要实现的目标:google.fr/…。此外,您的帖子没有问题。
  • erfan golbahari,你没有描述你的问题。你的代码有什么具体问题?

标签: c# json ssl


【解决方案1】:

您的代码看起来很原始,您应该使用一些有用的库,例如 Newtonsoft.JSON 和 RestSharp

【讨论】:

    【解决方案2】:

    在 NET 4.0 中你可以使用

    public TResponse Send<TRequest, TResponse>(string url, TRequest request)
    {
            var webRequest = (HttpWebRequest)WebRequest.Create(url);
    
            webRequest.Method = WebRequestMethods.Http.Post;
            webRequest.ContentType = "application/json";
    
            ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);
    
            var json = Newtonsoft.Json.JsonConvert.SerializeObject(request);
            using (var requestStream = webRequest.GetRequestStream())
            {
                using (var writer = new StreamWriter(requestStream))
                {
                    writer.Write(json);
                }
            }
    
            try
            {
                using (var webResponse = (HttpWebResponse)webRequest.GetResponse())
                {
                    using (var responseStream = webResponse.GetResponseStream())
                    {
                        using (var reader = new StreamReader(responseStream))
                        {
                            var responseData = reader.ReadToEnd();
                            webResponse.Close();
    
                            return Newtonsoft.Json.JsonConvert.DeserializeObject<TResponse>(responseData);
                        }
                    }
                }
            }
            catch (WebException ex)
            {
                throw ProcessWebException(ex); // ToDo
            }
    }
    

    在 NET 4.5 中你可以使用

    public async Task<TResponse> ExecuteAsync<TRequest, TResponse>(string url, TRequest request)
    {
        ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);
    
        using (var handler = new HttpClientHandler() {})
        {
            using (var client = new HttpClient(handler))
            {
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    
                var json = Newtonsoft.Json.JsonConvert.SerializeObject(request);
                var httpContent = new StringContent(json, Encoding.UTF8, "application/json");
    
                var processResult = await client.PostAsync(url, httpContent);
                var responseBody = processResult.Content.ReadAsStringAsync().Result;
    
                return Newtonsoft.Json.JsonConvert.DeserializeObject<TResponse>(responseBody);
            }
        }
    }
    

    在示例中,我使用 Newtonsoft.Json 库。

    【讨论】:

    • “我应该如何使用 net 4.5”是什么意思?
    • @AlekseiSemidotskii 这是我一直在寻找的解决方案!非常感谢。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 2013-02-25
    • 2016-01-03
    相关资源
    最近更新 更多