Вместо Record-а в методе GetWebPageShortResultAsync получаю System.Threading.Tasks.Task`1[FinallyTask.HttpHelper+WebPageShortResult],нужно как-то это исправить
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Xunit;
namespace FinallyTask
{
public class Program
{
static void Main(string[] args)
{
Console.WriteLine(HttpHelper.GetWebPageShortResultAsync(new Uri("https://www.google.com/"), 1, default));
}
}
public static class HttpHelper
{
public record WebPageShortResult
{
public string Body { get; set; }
public string Title { get; set; }
}
public static Uri? TryConvertToHttpUrl(this string t)
{
if (string.IsNullOrWhiteSpace(t)) return null;
return Uri.TryCreate(t, UriKind.Absolute, out Uri uri) && (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps)
? uri
: null;
}
public static async Task<Uri> GetRedirectedUrlAsync(Uri uri, CancellationToken cancellationToken = default)
{
var client = new HttpClient();
var response = await client.GetAsync(uri, cancellationToken);
return response.RequestMessage.RequestUri;
}
public static async Task<WebPageShortResult> GetWebPageShortResultAsync(Uri uri, int bodyCharCount, CancellationToken cancellationToken = default)
{
var client = new HttpClient();
string response = await client.GetStringAsync(uri);
string body = "";
string title = "";
if (response.Contains("<title>") && response.Contains("<body>"))
{
title = response.Substring(response.IndexOf("<title>") + 7);
title = title.Remove(title.IndexOf("</title>")).Trim();
body = response.Substring(response.IndexOf("<body>") + 6);
body = body.Remove(title.IndexOf("</body>")).Trim();
body = body.Substring(0, bodyCharCount);
}
else
{
title = "<Title not found>";
body = "<Body not found>";
}
var result = new WebPageShortResult{ Title = title, Body = body };
return result;
}
}
}
GetWebPageShortResultAsyncявляется асинхроннымTask'ом, который надо ожидать черезawait, где вы это делаете? Также я советую вам прочитать документацию проHttpClient, там вы увидите:HttpClient предназначен для однократного создания экземпляра и повторного использования в течение всего жизненного цикла приложения.. Ну а также, советую почитать это, ибо сейчас вы страдаете ерундой, а не парсите HTML. Ну и последнее -staticзло! Забудьте про него. Не ленитесь делать полноценные классы! – EvgeniyZ Feb 12 '22 at 12:20static void Main(string[] args)меняете наstatic async Task Main(string[] args), ну а вызовHttpHelper.GetWebPageShortResultAsyncменяете наawait HttpHelper.GetWebPageShortResultAsync. – EvgeniyZ Feb 12 '22 at 13:21