349 Stimmen

Wie postet man Daten an eine bestimmte URL mit WebClient in C#

Ich muss "HTTP Post" mit WebClient verwenden, um einige Daten an eine bestimmte URL zu senden, die ich habe.

Nun, ich weiß, dass dies mit WebRequest erreicht werden kann, aber aus einigen Gründen möchte ich stattdessen WebClient verwenden. Ist das möglich? Wenn ja, kann mir jemand ein Beispiel zeigen oder mich in die richtige Richtung weisen?

5voto

Ogglas Punkte 48648

Mit einfachen client.UploadString(adress, content); funktioniert normalerweise gut, aber ich denke, es sollte daran erinnert werden, dass eine WebException wird ausgelöst, wenn kein erfolgreicher HTTP-Statuscode zurückgegeben wird. Normalerweise behandle ich es so, dass ich jede Ausnahmemeldung, die der Remote-Server zurückgibt, ausdrucke:

try
{
    postResult = client.UploadString(address, content);
}
catch (WebException ex)
{
    String responseFromServer = ex.Message.ToString() + " ";
    if (ex.Response != null)
    {
        using (WebResponse response = ex.Response)
        {
            Stream dataRs = response.GetResponseStream();
            using (StreamReader reader = new StreamReader(dataRs))
            {
                responseFromServer += reader.ReadToEnd();
                _log.Error("Server Response: " + responseFromServer);
            }
        }
    }
    throw;
}

3voto

Bora Karaca Punkte 321

Mit webapiclient mit Modell senden serialisieren json Parameter Anfrage.

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-Aufrufer-Methode

    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);
        }

    }

1voto

j4jada Punkte 154

Die meisten Antworten sind alt. Wollte nur teilen, was für mich gearbeitet. Im Interesse der Dinge asynchron zu tun, d.h. um Daten an bestimmte URL mit WebClient asynchron in .NET 6.0 Preview 7, .NET Core und anderen Versionen zu posten, kann mit WebClient.UploadStringTaskAsync Methode .

Namensraum verwenden System.Net; und für eine Klasse ResponseType um die Antwort des Servers zu erfassen, können wir diese Methode verwenden, um POST Daten zu einer bestimmten URL. Achten Sie darauf, dass Sie die await Schlüsselwort beim Aufruf dieser Methode

    public async Task<ResponseType> MyAsyncServiceCall()
    {
        try
        {
            var uri = new Uri("http://your_uri");
            var body= "param1=value1&param2=value2&param3=value3";

            using (var wc = new WebClient())
            {
                wc.Headers[HttpRequestHeader.Authorization] = "yourKey"; // Can be Bearer token, API Key etc.....
                wc.Headers[HttpRequestHeader.ContentType] = "application/json"; // Is about the payload/content of the current request or response. Do not use it if the request doesn't have a payload/ body.
                wc.Headers[HttpRequestHeader.Accept] = "application/json"; // Tells the server the kind of response the client will accept.
                wc.Headers[HttpRequestHeader.UserAgent] = "PostmanRuntime/7.28.3"; 

                string result = await wc.UploadStringTaskAsync(uri, body);
                return JsonConvert.DeserializeObject<ResponseType>(result);
            }
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }
    }

0voto

KayV Punkte 11233

Hier ist die klare Antwort:

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;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X