C# 与.NETCore2.2中的HttpClient等效?

C# 与.NETCore2.2中的HttpClient等效?,c#,.net,linux,post,httpclient,C#,.net,Linux,Post,Httpclient,我这辈子第一次尝试切换到Linux,但我的C#应用程序在那里有些困难 我正在制作一个应用程序,每60秒抓取一个网站,将整个html代码保存在一个名为“original”的变量中,然后在每次运行后进行比较。如果网站的html代码有任何变化,它会向我的电报聊天室发送一条信息,说“你好,世界” 我已经删除了我的凭证和其他东西,但这就是代码的样子。由于HttpClient不存在于.NET Core 2.2中(这是迄今为止我唯一能够在Linux上安装的(Ubuntu,我在AWS EC2和带有XFCE的远程

我这辈子第一次尝试切换到Linux,但我的C#应用程序在那里有些困难

我正在制作一个应用程序,每60秒抓取一个网站,将整个html代码保存在一个名为“original”的变量中,然后在每次运行后进行比较。如果网站的html代码有任何变化,它会向我的电报聊天室发送一条信息,说“你好,世界”

我已经删除了我的凭证和其他东西,但这就是代码的样子。由于HttpClient不存在于.NET Core 2.2中(这是迄今为止我唯一能够在Linux上安装的(Ubuntu,我在AWS EC2和带有XFCE的远程桌面上)。我对Linux也是完全陌生的。我确实看到.NET Core 3已经推出,但我似乎无法安装它(我做错什么了吗?).我也不知道那里是否包括HttpClient

无论如何,有没有办法用其他东西代替HttpClient,将PostAsync发送到Telegram的API

using System;
using System.Threading.Tasks;
using System.Net.Http;
using System.Net;
using System.Collections.Generic;

namespace MyApp
{
    class Program
    {
        private static readonly HttpClient httpclient = new HttpClient();
        private static readonly WebClient client = new WebClient();
        public static string original = "";
        static void Main(string[] args)
        {
            Task.Run(async () =>
            {
                while (true)
                {
                    await Task.Delay(60000);
                    string result = client.DownloadString("https://website.com");
                    if (original != result && original != "")
                    {
                        Dictionary<string, string> inputData = new Dictionary<string, string>
                        {
                            { "chat_id", "x" },
                            { "text", "Hello world" }
                        };

                        var request = await httpclient.PostAsync("https://api.telegram.org/botxxxx/sendMessage", new FormUrlEncodedContent(inputData));
                        Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " Apartment listings were updated.");
                    }
                    else
                    {
                        Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " No change in apartment listings.");
                    }

                    original = result;

                }
            });

            Console.Read();
        }
    }
}
我只是用mcs Program.cs编译,然后用mono Program.exe运行

编辑:

解决方案:我不必构建它。我只需使用命令运行它(不需要对上述代码做任何更改):
dotnet run


工作正常!

Httpclient确实存在于.NETCore中,但我相信您可能需要下载一个nuget软件包


特别是Microsoft.AspNetCore.Http。

正如黄色方块所提到的,HttpClient确实存在于.Net Core 2.2中(例如,您可以在此处看到它)。唯一的一点是,您不需要添加任何特定的包

您发布的代码段在Windows和Linux上编译时应该没有错误。只需使用命名空间System.Net.Http(已经在您的代码段中)就足够了

--更新


使用
dotnet build
生成项目(请检查项目目录中的项目)

我试图通过nuget安装它,它成功了,但是我在编译时遇到了相同的错误。当我使用Microsoft.AspNetCore.Http引用
时;
我遇到了另一个找不到的错误。你确定我应该使用Asp.NET来安装这个控制台应用程序吗?我现在意识到如何在Linux终端中添加对DLL的引用。我运行命令
mcs/参考:System.Net.Http.dll Program.cs
并且它编译得很好(我的dll与.cs文件位于同一文件夹中)。但是当我运行时,我得到以下错误:
System.invalidProgrameException:System.Net.Http.HttpClient:.ctor()中的IL代码无效:方法正文为空。
知道如何解决吗?我可能会尝试重新安装?我不确定是否可以,抱歉,我无法提供更多帮助。可能您缺少某种linux依赖项。如果您通过google查看,可以通过一些方法验证/检查是否所有这些都已安装。它似乎不起作用。您对此有何看法单独在Linux上编译代码?mcs命令是否不正确?我在C#project文件夹中打开一个终端,然后运行
mcs Program.cs
,然后运行
mono Program.exe
。try
dotnet build
insteadIt生成一个“可执行文件”,尽管没有文件扩展名。当我尝试运行它时(双击它,或者运行
mono
命令,什么都没有发生)。但它确实构建了,并发布了大量文件。现在它可以使用以下命令运行:
dotnet run--project MyApp.csproj“$1”
-它没有构建任何东西。但我可以运行它!因此,似乎使用
dotnet
命令是可行的。使用
mcs
似乎仅限于2.0以前的版本…好吧,构建过程的输出文件中应该有file.dll,只需运行
dotnet.dll
,即可启动程序
Program.cs(5,18): error CS0234: The type or namespace name `Http' does not exist in the namespace `System.Net'. Are you missing `System.Net.Http' assembly reference?
Program.cs(21,33): error CS0246: The type or namespace name `HttpClient' could not be found. Are you missing an assembly reference?
Compilation failed: 2 error(s), 0 warnings