Created
July 20, 2019 22:27
-
-
Save Lupusa87/08942c1e18c968303e626a7de8eacca9 to your computer and use it in GitHub Desktop.
Extension for blazor httpclient to do some custom stuff.
This file contains 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.Collections.Generic; | |
using System.Linq; | |
using System.Net.Http; | |
using System.Text; | |
using System.Text.Json; | |
using System.Text.Json.Serialization; | |
using System.Threading.Tasks; | |
namespace BlazorTodos | |
{ | |
public static class HttpClientEx | |
{ | |
//public static readonly JsonSerializerOptions Options = new JsonSerializerOptions | |
//{ | |
// PropertyNamingPolicy = JsonNamingPolicy.CamelCase, | |
//}; | |
static JsonReaderOptions options = new JsonReaderOptions | |
{ | |
AllowTrailingCommas = true | |
}; | |
static JsonSerializerOptions opt = new JsonSerializerOptions | |
{ | |
PropertyNamingPolicy = JsonNamingPolicy.CamelCase, | |
PropertyNameCaseInsensitive = true | |
}; | |
public static async Task<T> MyGetJsonAsync<T>(this HttpClient client, string requestUri) | |
{ | |
if (client is HttpClient) | |
{ | |
string a = await client.GetStringAsync(requestUri); | |
JsonDocument document = JsonDocument.Parse(a, options); | |
return JsonSerializer.Parse<T>(document.RootElement.GetProperty("value").GetRawText(), opt); | |
} | |
else | |
{ | |
throw new InvalidOperationException(); | |
} | |
} | |
public static async Task<T> MyPostFormGetJsonAsync<T>(this HttpClient client, string requestUri, HttpContent content) | |
{ | |
if (client is HttpClient) | |
{ | |
var response = await client.PostAsync(requestUri, content); | |
JsonDocument document = JsonDocument.Parse(await response.Content.ReadAsStringAsync()); | |
return JsonSerializer.Parse<T>(document.RootElement.GetProperty("value").GetRawText(), opt); | |
} | |
else | |
{ | |
throw new InvalidOperationException(); | |
} | |
} | |
public static async Task<T> MyPostJsonGetJsonAsync<T>(this HttpClient client, string requestUri, T content) | |
{ | |
if (client is HttpClient) | |
{ | |
return await SendJsonAsync<T>(client, HttpMethod.Post, requestUri, content); | |
} | |
else | |
{ | |
throw new InvalidOperationException(); | |
} | |
} | |
public static async Task<string> MyPostJsonGetStringAsync(this HttpClient client, string requestUri, object content) | |
{ | |
if (client is HttpClient) | |
{ | |
var response = await client.SendAsync(new HttpRequestMessage(HttpMethod.Post, requestUri) | |
{ | |
Content = new StringContent(JsonSerializer.ToString(content, opt), Encoding.UTF8, "application/json") | |
}); | |
var stringContent = await response.Content.ReadAsStringAsync(); | |
JsonDocument document = JsonDocument.Parse(stringContent); | |
return document.RootElement.GetProperty("value").GetRawText(); | |
} | |
else | |
{ | |
throw new InvalidOperationException(); | |
} | |
} | |
private static async Task<T> SendJsonAsync<T>( HttpClient httpClient, HttpMethod method, string requestUri, object content) | |
{ | |
var response = await httpClient.SendAsync(new HttpRequestMessage(method, requestUri) | |
{ | |
Content = new StringContent(JsonSerializer.ToString(content, opt), Encoding.UTF8, "application/json") | |
}); | |
var stringContent = await response.Content.ReadAsStringAsync(); | |
JsonDocument document = JsonDocument.Parse(stringContent); | |
T a = JsonSerializer.Parse<T>(document.RootElement.GetProperty("value").GetRawText(), opt); | |
return a; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment