How to post data to specific URL using WebClient in C#

后端 未结 8 1534
深忆病人
深忆病人 2020-11-22 07:12

I need to use \"HTTP Post\" with WebClient to post some data to a specific URL I have.

Now, I know this can be accomplished with WebRequest but for some reasons I wa

相关标签:
8条回答
  • 2020-11-22 07:51

    I just found the solution and yea it was easier than I thought :)

    so here is the solution:

    string URI = "http://www.myurl.com/post.php";
    string myParameters = "param1=value1&param2=value2&param3=value3";
    
    using (WebClient wc = new WebClient())
    {
        wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
        string HtmlResult = wc.UploadString(URI, myParameters);
    }
    

    it works like charm :)

    0 讨论(0)
  • 2020-11-22 07:56
    string URI = "site.com/mail.php";
    using (WebClient client = new WebClient())
    {
        System.Collections.Specialized.NameValueCollection postData = 
            new System.Collections.Specialized.NameValueCollection()
           {
                  { "to", emailTo },  
                  { "subject", currentSubject },
                  { "body", currentBody }
           };
        string pagesource = Encoding.UTF8.GetString(client.UploadValues(URI, postData));
    }
    
    0 讨论(0)
  • 2020-11-22 08:01

    There is a built in method called UploadValues that can send HTTP POST (or any kind of HTTP methods) AND handles the construction of request body (concatenating parameters with "&" and escaping characters by url encoding) in proper form data format:

    using(WebClient client = new WebClient())
    {
        var reqparm = new System.Collections.Specialized.NameValueCollection();
        reqparm.Add("param1", "<any> kinds & of = ? strings");
        reqparm.Add("param2", "escaping is already handled");
        byte[] responsebytes = client.UploadValues("http://localhost", "POST", reqparm);
        string responsebody = Encoding.UTF8.GetString(responsebytes);
    }
    
    0 讨论(0)
  • 2020-11-22 08:02

    Using webapiclient with model send serialize json parameter request.

    PostModel.cs

        public string Id { get; set; }
        public string Name { get; set; }
        public string Surname { get; set; }
        public int Age { get; set; }
    

    WebApiClient.cs

    internal class WebApiClient  : IDisposable
      {
    
        private bool _isDispose;
    
        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
    
        public void Dispose(bool disposing)
        {
            if (!_isDispose)
            {
    
                if (disposing)
                {
    
                }
            }
    
            _isDispose = true;
        }
    
        private void SetHeaderParameters(WebClient client)
        {
            client.Headers.Clear();
            client.Headers.Add("Content-Type", "application/json");
            client.Encoding = Encoding.UTF8;
        }
    
        public async Task<T> PostJsonWithModelAsync<T>(string address, string data,)
        {
            using (var client = new WebClient())
            {
                SetHeaderParameters(client);
                string result = await client.UploadStringTaskAsync(address, data); //  method:
        //The HTTP method used to send the file to the resource. If null, the default is  POST 
                return JsonConvert.DeserializeObject<T>(result);
            }
        }
    }
    

    Business caller method

        public async Task<ResultDTO> GetResultAsync(PostModel model)
        {
            try
            {
                using (var client = new WebApiClient())
                {
                    var serializeModel= JsonConvert.SerializeObject(model);// using Newtonsoft.Json;
                    var response = await client.PostJsonWithModelAsync<ResultDTO>("http://www.website.com/api/create", serializeModel);
                    return response;
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
    
        }
    
    0 讨论(0)
  • 2020-11-22 08:02

    Here is the crisp answer:

    public String sendSMS(String phone, String token) {
        WebClient webClient = WebClient.create(smsServiceUrl);
    
        SMSRequest smsRequest = new SMSRequest();
        smsRequest.setMessage(token);
        smsRequest.setPhoneNo(phone);
        smsRequest.setTokenId(smsServiceTokenId);
    
        Mono<String> response = webClient.post()
              .uri(smsServiceEndpoint)
              .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
              .body(Mono.just(smsRequest), SMSRequest.class)
              .retrieve().bodyToMono(String.class);
    
        String deliveryResponse = response.block();
        if (deliveryResponse.equalsIgnoreCase("success")) {
          return deliveryResponse;
        }
        return null;
    }
    
    0 讨论(0)
  • 2020-11-22 08:05
    //Making a POST request using WebClient.
    Function()
    {    
      WebClient wc = new WebClient();
    
      var URI = new Uri("http://your_uri_goes_here");
    
      //If any encoding is needed.
      wc.Headers["Content-Type"] = "application/x-www-form-urlencoded";
      //Or any other encoding type.
    
      //If any key needed
    
      wc.Headers["KEY"] = "Your_Key_Goes_Here";
    
      wc.UploadStringCompleted += 
          new UploadStringCompletedEventHandler(wc_UploadStringCompleted);
    
      wc.UploadStringAsync(URI,"POST","Data_To_Be_sent");    
    }
    
    void wc__UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)    
    {  
      try            
      {          
         MessageBox.Show(e.Result); 
         //e.result fetches you the response against your POST request.         
      }
      catch(Exception exc)         
      {             
         MessageBox.Show(exc.ToString());            
      }
    }
    
    0 讨论(0)
提交回复
热议问题