0

Вместо 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:20
  • @EvgeniyZ сделал всё так как вы сказали,но при этом ничего не получаю из метода – Matsenko1 Feb 12 '22 at 13:16
  • Я не вижу, чтоб в вопросе что-либо изменилось, а значит "сделал всё так как вы сказали" увы, для меня не говорит что-либо. Вот если править тот код, что в вопросе, у вас должно быть нечто такое static void Main(string[] args) меняете на static async Task Main(string[] args), ну а вызов HttpHelper.GetWebPageShortResultAsync меняете на await HttpHelper.GetWebPageShortResultAsync. – EvgeniyZ Feb 12 '22 at 13:21
  • Извиняюсь,это что-то у меня с самим методом – Matsenko1 Feb 12 '22 at 13:24

0 Answers0