net7中怎样创建主机和添加endpoint

以下创建主机和添加endpoint是.net core中的写法。帮忙改成.net6中的写法,谢谢!

//1.在主机中创建托管服务
var host = Host.CreateDefaultBuilder(Array.Empty<string>())
            .ConfigureWebHostDefaults(
                webBuilder =>
                {
                    webBuilder.UseKestrel(
                        o =>
                        {
                            // This will allow MQTT connections based on TCP port 1883.
                            o.ListenAnyIP(1883, l => l.UseMqtt());

                            // This will allow MQTT connections based on HTTP WebSockets with URI "localhost:5000/mqtt"
                            // See code below for URI configuration.
                            o.ListenAnyIP(5000); // Default HTTP pipeline
                        });

                    webBuilder.UseStartup<Startup>();
                });

        return host.RunConsoleAsync();

//2.在StatUp中增加endpoint
sealed class Startup
    {
        public void Configure(IApplicationBuilder app, IWebHostEnvironment environment, MqttController mqttController)
        {
            app.UseRouting();

            app.UseEndpoints(
                endpoints =>
                {
                    endpoints.MapConnectionHandler<MqttConnectionHandler>(
                        "/mqtt",
                        httpConnectionDispatcherOptions => httpConnectionDispatcherOptions.WebSockets.SubProtocolSelector =
                            protocolList => protocolList.FirstOrDefault() ?? string.Empty);
                });
        }
    }
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客: 深入浅出之----ASP.NET Core 3.1 中间件流程与路由体系中的 从Endpoint的角度查看请求-响应流程图 部分也许能够解决你的问题。
  • 以下回答由chatgpt基于相关博客总结生成:

    对于以上给出的.NET 6中创建主机和添加endpoint的代码,以下是对具体步骤的解释和代码示例:

    1. 导入所需的命名空间:
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Connections;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Hosting;
    using System.Linq;
    
    1. 在主机中创建托管服务:
    var builder = WebApplication.CreateBuilder(args);
    
    1. 添加托管服务:
    builder.ConfigureServices((hostingContext, services) =>
    {
        services.Configure<KestrelServerOptions>(options =>
        {
            options.ListenAnyIP(1883, listenOptions =>
            {
                listenOptions.UseMqtt();
            });
    
            options.ListenAnyIP(5000);
        });
    });
    
    1. 添加Startup类:
    builder.Configure((app, env) =>
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
    
        app.UseRouting();
    
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapConnectionHandler<MqttConnectionHandler>("/mqtt", options =>
            {
                options.WebSockets.SubProtocolSelector = (protocolList) =>
                {
                    return protocolList.FirstOrDefault() ?? string.Empty;
                };
            });
        });
    });
    
    1. 构建应用程序:
    var app = builder.Build();
    
    1. 运行应用程序:
    app.Run();
    

    以上就是在.NET 6中创建主机和添加endpoint的具体步骤和示例代码。希望对您有所帮助!如果您还有其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

以下答案参考ChatGPT。

  • 使用新的通用主机:.NET 6 引入了一种新的通用主机方法来构建应用程序。 将 Host.CreateDefaultBuilder 替换为 Host.CreateHostBuilder 并相应更新配置。

  • 使用新的最小 API:在 .NET 6 中,有新的最小 API 可以简化创建小型、集中的 API 的过程。 可以使用这些新的 API 来代替以前的方法。

  • 使用app.MapConnections方法:在.NET 6中,终结点路由已更新。 使用 app.MapConnections 方法而不是 app.UseEndpoints。

  • 在依赖项注入容器中注册服务:在.NET 6 中,使用ConfigureServices 中的services 参数在依赖项注入容器中注册服务。

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Connections;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        var host = Host.CreateHostBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.ConfigureKestrel(o =>
                {
                    // This will allow MQTT connections based on TCP port 1883.
                    o.ListenAnyIP(1883, l => l.UseMqtt());

                    // This will allow MQTT connections based on HTTP WebSockets with URI "localhost:5000/mqtt"
                    // See code below for URI configuration.
                    o.ListenAnyIP(5000); // Default HTTP pipeline
                });

                webBuilder.UseStartup<Startup>();
            })
            .Build();

        host.Run();
    }
}

sealed class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // Add your services to the dependency injection container here.
        // For example, you can add the MqttController as a singleton service:
        services.AddSingleton<MqttController>();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment environment)
    {
        app.UseRouting();

        app.MapConnections("/mqtt", builder =>
        {
            builder.UseConnectionHandler<MqttConnectionHandler>();
        });
    }
}