How to use System.Net.HttpClient to post a complex type?

前端 未结 9 504
感动是毒
感动是毒 2020-11-29 16:31

I have a custom complex type that I want to work with using Web API.

public class Widget
{
    public int ID { get; set; }
    public string Name { get; set;         


        
相关标签:
9条回答
  • 2020-11-29 17:04

    In case someone like me didn't really understand what all above are talking about, I give an easy example which is working for me. If you have a web api which url is "http://somesite.com/verifyAddress", it is a post method and it need you to pass it an address object. You want to call this api in your code. Here what you can do.

        public Address verifyAddress(Address address)
        {
            this.client = new HttpClient();
            client.BaseAddress = new Uri("http://somesite.com/");
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            var urlParm = URL + "verifyAddress";
            response = client.PostAsJsonAsync(urlParm,address).Result;
            var dataObjects = response.IsSuccessStatusCode ? response.Content.ReadAsAsync<Address>().Result : null;
            return dataObjects;
        }
    
    0 讨论(0)
  • 2020-11-29 17:04

    Make a service call like this:

    public async void SaveActivationCode(ActivationCodes objAC)
    {
        var client = new HttpClient();
        client.BaseAddress = new Uri(baseAddress);
        HttpResponseMessage response = await client.PutAsJsonAsync(serviceAddress + "/SaveActivationCode" + "?apiKey=445-65-1216", objAC);
    } 
    

    And Service method like this:

    public HttpResponseMessage PutSaveActivationCode(ActivationCodes objAC)
    {
    }
    

    PutAsJsonAsync takes care of Serialization and deserialization over the network

    0 讨论(0)
  • 2020-11-29 17:05

    The generic HttpRequestMessage<T> has been removed. This :

    new HttpRequestMessage<Widget>(widget)
    

    will no longer work.

    Instead, from this post, the ASP.NET team has included some new calls to support this functionality:

    HttpClient.PostAsJsonAsync<T>(T value) sends “application/json”
    HttpClient.PostAsXmlAsync<T>(T value) sends “application/xml”
    

    So, the new code (from dunston) becomes:

    Widget widget = new Widget()
    widget.Name = "test"
    widget.Price = 1;
    
    HttpClient client = new HttpClient();
    client.BaseAddress = new Uri("http://localhost:44268");
    client.PostAsJsonAsync("api/test", widget)
        .ContinueWith((postTask) => postTask.Result.EnsureSuccessStatusCode() );
    
    0 讨论(0)
提交回复
热议问题