Replaced the private ReadErrorAsync method in LayoutApiClient with calls to ApiClientHelper.ReadErrorAsync, centralizing error handling logic for improved consistency and reuse.
54 lines
1.8 KiB
C#
54 lines
1.8 KiB
C#
using System.Net.Http.Json;
|
|
using DbFirst.BlazorWebApp.Models;
|
|
|
|
namespace DbFirst.BlazorWebApp.Services;
|
|
|
|
public class LayoutApiClient
|
|
{
|
|
private readonly HttpClient _httpClient;
|
|
private const string Endpoint = "api/layouts";
|
|
|
|
public LayoutApiClient(HttpClient httpClient)
|
|
{
|
|
_httpClient = httpClient;
|
|
}
|
|
|
|
public async Task<LayoutDto?> GetAsync(string layoutType, string layoutKey, string userName)
|
|
{
|
|
var url = $"{Endpoint}?layoutType={Uri.EscapeDataString(layoutType)}&layoutKey={Uri.EscapeDataString(layoutKey)}&userName={Uri.EscapeDataString(userName)}";
|
|
var response = await _httpClient.GetAsync(url);
|
|
if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
response.EnsureSuccessStatusCode();
|
|
return await response.Content.ReadFromJsonAsync<LayoutDto>();
|
|
}
|
|
|
|
public async Task<LayoutDto> UpsertAsync(LayoutDto dto)
|
|
{
|
|
var response = await _httpClient.PostAsJsonAsync(Endpoint, dto);
|
|
if (!response.IsSuccessStatusCode)
|
|
{
|
|
var detail = await ApiClientHelper.ReadErrorAsync(response);
|
|
throw new InvalidOperationException(detail);
|
|
}
|
|
|
|
var payload = await response.Content.ReadFromJsonAsync<LayoutDto>();
|
|
return payload ?? dto;
|
|
}
|
|
|
|
public async Task DeleteAsync(string layoutType, string layoutKey, string userName)
|
|
{
|
|
var url = $"{Endpoint}?layoutType={Uri.EscapeDataString(layoutType)}&layoutKey={Uri.EscapeDataString(layoutKey)}&userName={Uri.EscapeDataString(userName)}";
|
|
var response = await _httpClient.DeleteAsync(url);
|
|
if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
|
|
{
|
|
return;
|
|
}
|
|
|
|
response.EnsureSuccessStatusCode();
|
|
}
|
|
}
|