Closed oshakhmatov closed 1 month ago
вместо ручной десериализации лучше использовать готовый HttpClient.GetFromJsonAsync
нашёл только такой метод:
await response.Content.ReadFromJsonAsync<Post>();
но это так, просто для понимания, что такое есть ReadFromJsonAsync тоже хорошо
Увидел, спасибо! Если делать сразу:
return await client.GetFromJsonAsync<Post>($"https://jsonplaceholder.typicode.com/posts/{postId}");
то как понять, что IsSuccessStatusCode?
можно обернуть в try catch и ловить WebException (например сейчас обработки исключения нет и если будет например таймаут по одному из запросов - упадет все приложение)
try {} catch (WebException) {return null}
например
1 возвращаемый тип здесь не должен быть nullable 2 и на следующих строчках лучше писать var как и везде 3 тут лучше использовать инициализатор массива и далее при помощи Select из LINQ преобразовать числа в таски вот так:
4 тут лучше опять же использовать var и платформонезависимый Path.Combine потому что слэши на линукс и виндоус разные
var fileName = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, "..", "..", "..", "posts.txt"));
5 тут лучше использовать интерполяцию вместо форматирования. Она быстрее и лучше оптимизирована в .NET 8, будет выглядеть вот так:var url = $"https://jsonplaceholder.typicode.com/posts/{postId}";
6 вместо ручной десериализации лучше использовать готовыйHttpClient.GetFromJsonAsync<T>
7 лучше всегда писать явно, то есть null здесь 8 лучше добавить еще и проверку файлаstring.IsNullOrEmpty(fileName)
9 тут нужно var вместо явного типа (для однообразия и краткости), а также использовать именованный аргумент для значения false так как по исходному кода не понятно, что именно мы указываем как false (нужно argName: false) 10 а вообще лучше использовать вот такую более короткую запись, которую обеспечивает встроенный метод у File: