diff --git a/Frameworks/MQTTnet.AspnetCore/ApplicationBuilderExtensions.cs b/Frameworks/MQTTnet.AspnetCore/ApplicationBuilderExtensions.cs index 06ca74d4..210f8a4b 100644 --- a/Frameworks/MQTTnet.AspnetCore/ApplicationBuilderExtensions.cs +++ b/Frameworks/MQTTnet.AspnetCore/ApplicationBuilderExtensions.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using MQTTnet.Core.Server; +using System.Linq; namespace MQTTnet.AspNetCore { @@ -14,8 +15,21 @@ namespace MQTTnet.AspNetCore { if (context.Request.Path == path && context.WebSockets.IsWebSocketRequest) { + string subprotocol = null; + + if (context.Request.Headers.TryGetValue("Sec-WebSocket-Protocol", out var requestedSubProtocolValues)) + { + if (requestedSubProtocolValues.Count > 0) + { + if (requestedSubProtocolValues.Any(v => v.ToLower() == "mqtt")) + { + subprotocol = "mqtt"; + } + } + } + var adapter = app.ApplicationServices.GetRequiredService(); - using (var webSocket = await context.WebSockets.AcceptWebSocketAsync("mqtt")) + using (var webSocket = await context.WebSockets.AcceptWebSocketAsync(subprotocol)) { await adapter.AcceptWebSocketAsync(webSocket); } diff --git a/Tests/MQTTnet.TestApp.NetCore/ClientTest.cs b/Tests/MQTTnet.TestApp.NetCore/ClientTest.cs index df3cd760..bc644e54 100644 --- a/Tests/MQTTnet.TestApp.NetCore/ClientTest.cs +++ b/Tests/MQTTnet.TestApp.NetCore/ClientTest.cs @@ -21,10 +21,10 @@ namespace MQTTnet.TestApp.NetCore { Server = "localhost" }, - ////ChannelOptions = new MqttClientWebSocketOptions - ////{ - //// Uri = "localhost" - ////} + //ChannelOptions = new MqttClientWebSocketOptions + //{ + // Uri = "ws://localhost:59690/mqtt" + //} }; var factory = new MqttFactory();