我查了谷歌上的每一页都没有明确的答案 现在这是我的代码:
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();
}
答案 0 :(得分:2)
您的代码看起来非常粗糙,您应该使用一些有用的库,例如Newtonsoft.JSON和RestSharp
答案 1 :(得分:1)
在.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库。