c# - 使用内置的 ASP.NET Core Web 服务器构建 .NET Core 控制台应用程序?

标签 c# asp.net-core asp.net-core-mvc

我在网上看到各种关于构建 .NET Core 控制台应用程序和构建 ASP.NET Core 应用程序的教程,但我没有找到关于构建 .NET Core 控制台应用程序的内容,该应用程序从控制台输出开始但也包含一个 ASP.NET 网络应用程序。在这种情况下,我正在编写一个作为 Windows 或 Linux 服务运行的应用程序。它作为守护进程运行。所以我现在想添加一个 ASP.NET Core Web 界面来输出状态信息。

有推荐的方法吗?我想我需要创建一个 WebHostBuilder 并使用 .Build() 创建我的新 WebHost,但是我应该为此创建一个新项目并且从我的控制台应用程序项目中引用它?如果是这样,它应该为项目使用哪个SDK?我不能使用 Microsoft.NET.Sdk.Web 因为这需要一个 Main 方法,如果要从现有的应用程序有自己的 Main 方法,但如果我使用 Microsoft.NET.Sdk.Razor,我似乎会遇到一堆依赖版本冲突和错误,例如:

Version conflict detected for Microsoft.Extensions.Configuration.Abstractions. Install/reference Microsoft.Extensions.Configuration.Abstractions 2.1.1 directly to project MyProject to resolve this issue.

所以我觉得我在这里缺少一些基本的东西;在 .NET Core 的控制台应用程序中嵌入 Web 应用程序的最佳实践究竟是什么?

最佳答案

您绝对可以在您的 .NET Core 项目中安装 ASP.NET Core 包,并构建一个 WebHost,它将用作您的应用程序中的 Web 服务器组件,正如您自己所说的。一个简单的方法是安装 Microsoft.AspNetCore.App metapackage ,其中将包括 ASP.NET Core 应用程序常用的所有包依赖项。

由于 ASP.NET Core 技术超出了我的回答范围,从现在开始我将使用简短的示例。

在您的项目中安装了 Microsoft.AspNetCore.App 元数据包之后,您可以继续创建一个 Startup 类来初始化您的服务器,并通过以下方式开发应用程序使用 ASP.NET Core 技术。一个简单的 Startup 类作为示例:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        /* configure any services you need here */
    }

    public void Configure(IApplicationBuilder app)
    {
        // Output a "hello world" to the user who accesses the server
        app.Use(async (context, next) =>
        {
            await context.Response.WriteAsync("Hello, world!");
        });
    }
}

然后您可以继续使用类似的东西创建一个虚拟主机:

IWebHost myHost = WebHost.CreateDefaultBuilder()
    .UseStartup<Startup>()
    .Build();

最后,您必须调用 Run() 方法,以便您的 Web 主机运行并开始监听连接:

myHost.Run();

运行应用程序,服务器将以一些默认配置运行(可能在 http://localhost:5000/ 地址下...默认情况下,服务器的地址/端口将打印到您的控制台输出).尝试通过浏览器访问服务器,它应该会向您打印一条漂亮的“hello world”消息。

Run() 方法是一种阻塞方法。由于您已经有一个控制台应用程序,您希望使用 Web 主机“扩展”它,因此您可能应该查看 Start()方法,它会在不阻止您的控制台应用程序的情况下触发网络主机,您可以使用它来仍然能够做一些事情,比如接受用户的输入。在 this doc page 中有一个这样做的小例子.

关于c# - 使用内置的 ASP.NET Core Web 服务器构建 .NET Core 控制台应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53345789/

相关文章:

c# - 如何使用 RtdServer 在 C# 中创建实时 Excel 自动化插件?

c# - 如何检查数字字符串是否在运行序列中

asp.net-core - 在 Entity Framework Core 中获取当前用户 ID 的正确方法

c# - 如何将 IFormFile 放入 MVC6 中的 View 模型中

.net - 以 JSON 消息的形式返回异常

c# - C#中如何通过子类的实例访问父类的方法

C# 正则表达式验证 "realistic"IP 值

asp.net-core - Kestrel 托管基础知识

asp.net-core - Blazor:单击按钮时调用服务器方法?

c# - 应用程序引发了未处理的异常。系统无效操作异常: Unable to > resolve service for type