Created
June 15, 2019 15:00
-
-
Save SergiyOsadchyy/92d63a531b049664532502230194b25d to your computer and use it in GitHub Desktop.
Call a Web API From a .NET Client (C#)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| using System; | |
| using System.Net; | |
| using System.Net.Http; | |
| using System.Net.Http.Headers; | |
| using System.Threading.Tasks; | |
| namespace HttpClientSample | |
| { | |
| public class Product | |
| { | |
| public string Id { get; set; } | |
| public string Name { get; set; } | |
| public decimal Price { get; set; } | |
| public string Category { get; set; } | |
| } | |
| class Program | |
| { | |
| static HttpClient client = new HttpClient(); | |
| static void ShowProduct(Product product) | |
| { | |
| Console.WriteLine($"Name: {product.Name}\tPrice: " + | |
| $"{product.Price}\tCategory: {product.Category}"); | |
| } | |
| static async Task<Uri> CreateProductAsync(Product product) | |
| { | |
| HttpResponseMessage response = await client.PostAsJsonAsync( | |
| "api/products", product); | |
| response.EnsureSuccessStatusCode(); | |
| // return URI of the created resource. | |
| return response.Headers.Location; | |
| } | |
| static async Task<Product> GetProductAsync(string path) | |
| { | |
| Product product = null; | |
| HttpResponseMessage response = await client.GetAsync(path); | |
| if (response.IsSuccessStatusCode) | |
| { | |
| product = await response.Content.ReadAsAsync<Product>(); | |
| } | |
| return product; | |
| } | |
| static async Task<Product> UpdateProductAsync(Product product) | |
| { | |
| HttpResponseMessage response = await client.PutAsJsonAsync( | |
| $"api/products/{product.Id}", product); | |
| response.EnsureSuccessStatusCode(); | |
| // Deserialize the updated product from the response body. | |
| product = await response.Content.ReadAsAsync<Product>(); | |
| return product; | |
| } | |
| static async Task<HttpStatusCode> DeleteProductAsync(string id) | |
| { | |
| HttpResponseMessage response = await client.DeleteAsync( | |
| $"api/products/{id}"); | |
| return response.StatusCode; | |
| } | |
| static void Main() | |
| { | |
| RunAsync().GetAwaiter().GetResult(); | |
| } | |
| static async Task RunAsync() | |
| { | |
| // Update port # in the following line. | |
| client.BaseAddress = new Uri("http://localhost:64195/"); | |
| client.DefaultRequestHeaders.Accept.Clear(); | |
| client.DefaultRequestHeaders.Accept.Add( | |
| new MediaTypeWithQualityHeaderValue("application/json")); | |
| try | |
| { | |
| // Create a new product | |
| Product product = new Product | |
| { | |
| Name = "Gizmo", | |
| Price = 100, | |
| Category = "Widgets" | |
| }; | |
| var url = await CreateProductAsync(product); | |
| Console.WriteLine($"Created at {url}"); | |
| // Get the product | |
| product = await GetProductAsync(url.PathAndQuery); | |
| ShowProduct(product); | |
| // Update the product | |
| Console.WriteLine("Updating price..."); | |
| product.Price = 80; | |
| await UpdateProductAsync(product); | |
| // Get the updated product | |
| product = await GetProductAsync(url.PathAndQuery); | |
| ShowProduct(product); | |
| // Delete the product | |
| var statusCode = await DeleteProductAsync(product.Id); | |
| Console.WriteLine($"Deleted (HTTP Status = {(int)statusCode})"); | |
| } | |
| catch (Exception e) | |
| { | |
| Console.WriteLine(e.Message); | |
| } | |
| Console.ReadLine(); | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment