diff --git a/src/JT808.DotNetty.Tests/JT808.DotNetty.WebApi.Test/Handlers/JT808WebAPIServerHandlerTest.cs b/src/JT808.DotNetty.Tests/JT808.DotNetty.WebApi.Test/Handlers/JT808WebAPIServerHandlerTest.cs index 225a7b2..47bfe2e 100644 --- a/src/JT808.DotNetty.Tests/JT808.DotNetty.WebApi.Test/Handlers/JT808WebAPIServerHandlerTest.cs +++ b/src/JT808.DotNetty.Tests/JT808.DotNetty.WebApi.Test/Handlers/JT808WebAPIServerHandlerTest.cs @@ -121,6 +121,23 @@ namespace JT808.DotNetty.WebApi.Test.Handlers Assert.Equal(1, result.Data.MsgFailCount); Assert.Equal(JT808ResultCode.Ok, result.Code); } + + [Fact] + public void UriTest1() + { + string uri = JT808NettyConstants.JT808WebApiRouteTable.SessionTcpGetAll +"? token=123456"; + var uriSpan = uri.AsSpan(); + var index = uriSpan.IndexOf('?'); + var result = uriSpan.Slice(0, index).ToString(); + Assert.Equal(JT808NettyConstants.JT808WebApiRouteTable.SessionTcpGetAll, result); + } + + [Fact] + public void UriTest2() + { + var index = JT808NettyConstants.JT808WebApiRouteTable.SessionTcpGetAll.IndexOf('?'); + Assert.Equal(-1, index); + } } public static class WebExt diff --git a/src/JT808.DotNetty.WebApi/Handlers/JT808WebAPIServerHandler.cs b/src/JT808.DotNetty.WebApi/Handlers/JT808WebAPIServerHandler.cs index 9b41101..46a25fc 100644 --- a/src/JT808.DotNetty.WebApi/Handlers/JT808WebAPIServerHandler.cs +++ b/src/JT808.DotNetty.WebApi/Handlers/JT808WebAPIServerHandler.cs @@ -51,7 +51,14 @@ namespace JT808.DotNetty.WebApi.Handlers } else { - if (jT808MsgIdHttpHandlerBase.HandlerDict.TryGetValue(msg.Uri, out var funcHandler)) + var uriSpan = msg.Uri.AsSpan(); + var index = uriSpan.IndexOf('?'); + string uri = msg.Uri; + if (index > 0) + { + uri = uriSpan.Slice(0, index).ToString(); + } + if (jT808MsgIdHttpHandlerBase.HandlerDict.TryGetValue(uri, out var funcHandler)) { jT808HttpResponse = funcHandler(new JT808HttpRequest() { Json = msg.Content.ToString(Encoding.UTF8) }); } @@ -77,7 +84,6 @@ namespace JT808.DotNetty.WebApi.Handlers headers.Set(ContentLengthEntity, contentLength); // Close the non-keep-alive connection after the write operation is done. ctx.WriteAndFlushAsync(response); - ctx.CloseAsync(); } public override void ExceptionCaught(IChannelHandlerContext context, Exception exception)