以下创建主机和添加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);
});
}
}
}
不知道你这个问题是否已经解决, 如果还没有解决的话:对于以上给出的.NET 6中创建主机和添加endpoint的代码,以下是对具体步骤的解释和代码示例:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Connections;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System.Linq;
var builder = WebApplication.CreateBuilder(args);
builder.ConfigureServices((hostingContext, services) =>
{
services.Configure<KestrelServerOptions>(options =>
{
options.ListenAnyIP(1883, listenOptions =>
{
listenOptions.UseMqtt();
});
options.ListenAnyIP(5000);
});
});
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;
};
});
});
});
var app = builder.Build();
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>();
});
}
}