• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Błąd w kodzie C#

Aruba Cloud - Virtual Private Server VPS
+1 głos
374 wizyt
pytanie zadane 28 czerwca 2021 w C# przez Mateusz Kacprzak 1 Nowicjusz (150 p.)

Hej, próbuje ze strony pobrać jej zawartość do pliku typu .txt

W kodzie występuje następujący błąd ( " nie można niejawnie przekonwertować typu "System.IO.Stream" na "string" ) i nie wiem jak go naprawić. Wrzucam wam mój kod:

using System;
using System.Threading.Tasks;
using System.Net.Http;
using System.Net;
using System.IO;
namespace Program
{
    class Program
    {
        public static string fileOutPut = @"C:\Users\Mateusz\source\repos\HTTPClient\HTTPClient\TextFile1.txt";
        static void Main(string[] args)
        {
            Console.WriteLine("Enter the URL that you want an html response from: ");
            string url = Console.ReadLine();
            var awaiter = CallURL(url);
            if (awaiter.Result != "");
            {
                File.WriteAllText(fileOutPut, awaiter.Result);
                Console.WriteLine("HTML Response output to " + fileOutPut);
            }
            Console.WriteLine("Press any key to exit");
            Console.ReadKey();
        }

        public static async Task<string> CallURL(string url)
        {
            HttpClient client = new HttpClient();
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
            client.DefaultRequestHeaders.Accept.Clear();
            var response = client.GetStreamAsync(url);
            return await response;
        }
    }
}


 

1 odpowiedź

0 głosów
odpowiedź 28 czerwca 2021 przez tangarr Mędrzec (155,140 p.)

Według definicji

public static async Task<string> CallURL(string url)

funkcja powinna zwracać obiekt typu Task<string>, jednak zwracany obiekt jest typu Task<System.IO.Stream>.

Użycie funkcji CallURL wewnątrz funkcji main sugeruje, że jednak oczekujesz strumienia a nie napisu.

Popraw definicję funkcji CallURL na prawidłowy

komentarz 28 czerwca 2021 przez Mateusz Kacprzak 1 Nowicjusz (150 p.)

Po tej zmianie : public static async Task<System.IO.Stream> CallURL(string url)

Pojawiają się kolejne dwa błędy ->

using System;
using System.Threading.Tasks;
using System.Net.Http;
using System.Net;
using System.IO;
namespace HTTPClient
{
    class Program
    {
        public static string fileOutPut = @"C:\Users\Mateusz\source\repos\HTTPClient\output.txt";
        static void Main(string[] args)
        {
            Console.WriteLine("Enter the URL that you want an html response from: ");
            string url = Console.ReadLine();
            var awaiter = CallURL(url);
            if (awaiter.Result != "")
            {
                File.WriteAllText(fileOutPut, awaiter.Result);
                Console.WriteLine("HTML Response output to " + fileOutPut);
            }
            Console.WriteLine("Press any key to exit");
            Console.ReadKey();
        }

        public static async Task<System.IO.Stream> CallURL(string url)
        {
            HttpClient client = new HttpClient();
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
            client.DefaultRequestHeaders.Accept.Clear();
            var response = client.GetStreamAsync(url);
            return await response;
        }
    }
}

1.Nie można zastosować operatora "!=" do argumentów operacji typu "Stream" lub "string".

Pytanie - czym mogę to zastąpić 

2.Argument "2": nie można przekonwertować z "System.IO.Stream" na "string"

komentarz 28 czerwca 2021 przez tangarr Mędrzec (155,140 p.)
Widzę, że się pomyliłem. Użyty getter Result należy do szablonu Task a nie do strumienia.
Żeby naprawić kod najpierw musisz zdecydować co ma zwracać funkcja CallURL (napis czy strumień). Aby odczytać napis ze strumienia najłatwiej będzie użyć klasy StreamReader.
komentarz 28 czerwca 2021 przez Mateusz Kacprzak 1 Nowicjusz (150 p.)

@tangarr, problem rozwiązany -> zamiast "GetStreamAsync" wystarczy użyć "GetStringAsync" 

Podobne pytania

+1 głos
1 odpowiedź 907 wizyt
pytanie zadane 4 stycznia 2020 w C# przez startCoding Obywatel (1,210 p.)
+2 głosów
1 odpowiedź 942 wizyt
pytanie zadane 11 sierpnia 2021 w C# przez kuba412 Początkujący (310 p.)
+1 głos
1 odpowiedź 135 wizyt
pytanie zadane 10 maja 2024 w C# przez ross Nowicjusz (180 p.)

93,335 zapytań

142,331 odpowiedzi

322,415 komentarzy

62,670 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...