Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.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# 如何发送正确的HTTP请求?_C#_Asp.net_Asp.net Mvc_Http_Request - Fatal编程技术网

C# 如何发送正确的HTTP请求?

C# 如何发送正确的HTTP请求?,c#,asp.net,asp.net-mvc,http,request,C#,Asp.net,Asp.net Mvc,Http,Request,我有一个现成的链接,将发送短信到用户的电话和OTP 但是,我正在使用这种方式,我想知道是否有更好的方式发送请求。还有,如何确保我得到了200 OK的回复 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); response.Close(); 您可以使用HttpClient 例如: p

我有一个现成的链接,将发送短信到用户的电话和OTP

但是,我正在使用这种方式,我想知道是否有更好的方式发送请求。还有,如何确保我得到了200 OK的回复

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

response.Close();

您可以使用HttpClient

例如:

public class Client
{
  HttpClient _httpClient;
  public Client()
  {
    _httpClient=new HttpClient();
  }
  //async post,get request
  public async Task<string> sendGetRequest(string url)
  {
    var response= await _httpClient.GetAsync(url);
    if(response.IsSuccessStatusCode)
    {
     //if response has status code 200 do something
     //in this case I'm just converting the content of the response in string format
      string result=await response.Content.ReadStringAsync();
    }
    else
    {
      return "error";
    }
  }
  public async Task<string> sendPostRequest(string url,string bodyJson)
  {
    //Example sending a post request with json as body.
    var body=new StringContent(bodyJson, Encoding.UTF8, "application/json");
    var response= await _httpClient.PostAsync(url,body);
    if(response.IsSuccessStatusCode)
    {
     //if response has status code 200 do something
     //in this case I'm just converting the contntent of the response in string format
      string result=await response.Content.ReadStringAsync();
      return result;
    }
    else
    {
     return "error";
    }
  }

}
公共类客户端
{
HttpClient HttpClient;
公共客户机()
{
_httpClient=新的httpClient();
}
//异步post、get请求
公共异步任务sendGetRequest(字符串url)
{
var response=await\u httpClient.GetAsync(url);
if(响应。IsSuccessStatusCode)
{
//如果响应的状态代码为200,请执行某些操作
//在本例中,我只是将响应的内容转换为字符串格式
字符串结果=wait response.Content.ReadStringAsync();
}
其他的
{
返回“错误”;
}
}
公共异步任务sendPostRequest(字符串url、字符串bodyJson)
{
//以json作为主体发送post请求的示例。
var body=newstringcontent(bodyJson,Encoding.UTF8,“application/json”);
var response=wait_httpClient.PostAsync(url,body);
if(响应。IsSuccessStatusCode)
{
//如果响应的状态代码为200,请执行某些操作
//在本例中,我只是将响应的内容转换为字符串格式
字符串结果=wait response.Content.ReadStringAsync();
返回结果;
}
其他的
{
返回“错误”;
}
}
}

什么是“OTP”?更好的方法是使用HttpClient,尤其是在.NET核心和即将推出的.NET 5中。为了确保得到200条回复,只需检查回复的状态。嘿@UweKeim,感谢您的快速回复。OTP代表一次性密码。“只是为了检查是否有更好的实践”使用HttpClient(正确!)是更好的实践。我已经回答了这个问题。正确使用HttpClient-这意味着使用异步代码而不是阻塞,检查响应状态代码等。同步HTTP调用会无缘无故阻塞线程,因为机器正在等待另一台机器的响应。阻塞并不意味着CPU没有使用,恰恰相反。将线程置于睡眠状态并重新调度是非常昂贵的,因此.NET在重新调度被阻止的线程之前先尝试spinwait。这意味着阻塞会导致更多的CPU使用亲爱的,非常感谢您的分享。它好多了,而且真的很有用!