Code: Select all
public class HttpClientHelper
{
private readonly IHttpClientFactory _httpClientFactory;
public HttpClientHelper(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}
public async Task MakeHttpRequestAsync(
string clientName,
string url,
HttpMethod httpMethod,
TRequest requestBody = default,
bool handleErrors = false)
{
// Get a named HttpClient instance
var client = _httpClientFactory.CreateClient(clientName);
var request = new HttpRequestMessage
{
Method = httpMethod,
RequestUri = new Uri(url)
};
// Serialize the request body to JSON (if it exists)
if (requestBody != null)
{
var json = JsonSerializer.Serialize(requestBody);
request.Content = new StringContent(json,
Encoding.UTF8, "application/json");
}
// Send the HTTP request
var response = await client.SendAsync(request);
// Handle errors if specified
if (handleErrors && !response.IsSuccessStatusCode)
{
throw new HttpRequestException($"Failed: {response.StatusCode}");
}
// Deserialize the response JSON into the specified type
var responseJson = await response.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize(responseJson,
new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
}
}
< /code>
Jetzt möchte ich eine strukturiertere Rendite aus dieser Funktion erzielen. Zum Beispiel benutze ich gerne für alle Antworten, so etwas wie < /p>
public class ApiResponse where T : class
{
public T? Data { get; set; }
public string? ErrorMessage { get; set; }
public int HttpErrorCode { get; set; } = 200;
public bool Success { get; set; } = false;
}
< /code>
Ich muss die Fehler im Hauptcode nicht bewältigen, und im generischen API -Client wird alles gut verwaltet. Wenn im Anruf einen Fehler vorhanden ist, kann ich in der Apiresponse
festlegen, wenn ich diesen Code schreibe:
Code: Select all
public async Task
MakeHttpRequestAsync(
...
)
{
// code
}
Der Typ- oder Namespace -Name Tresponse konnte nicht gefunden werden (fehlt Ihnen eine Verwendung von Anweisungen oder eine Assembly -Referenz?) Der Code.
Gibt es eine Möglichkeit, dies zu implementieren?