我正在try 在我的WASM应用程序中建立WebSocket连接. 我遵循了MSDN教程,并在我的Program.cs中启用了WebSockets:
app.UseWebSockets();
在那之后,我添加了一个新的控制器,如下所示:
[AllowAnonymous]
[ApiController]
[Route("[controller]")]
internal class ShellyPlusDataController : ControllerBase
{
[HttpGet]
[Route("[controller]/OnDataReceived")]
public async Task OnDataReceived()
{
if (HttpContext.WebSockets.IsWebSocketRequest)
{
using var webSocket = await HttpContext.WebSockets.AcceptWebSocketAsync();
var buffer = new byte[1024 * 4];
WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
while (!result.CloseStatus.HasValue)
{
string raw = Encoding.UTF8.GetString(buffer, 0, result.Count);
result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
}
await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
}
else
{
HttpContext.Response.StatusCode = StatusCodes.Status400BadRequest;
}
}
}
用PostMan打开与‘wss://localhost:7220/ShellyPlusData/OnDataReceived’的连接不起作用.显示的错误为:Error: Unexpected server response: 200
我在OnDataReceived()的开头设置了一个断点;它从未命中. 我还try 将URL更改为ws://或省略方法名称,但没有成功.
微软的教程也在Program.cs中建议这样做:
app.Use(async (context, next) =>
{
if (context.Request.Path == "/ws")
{
if (context.WebSockets.IsWebSocketRequest)
{
using var webSocket = await context.WebSockets.AcceptWebSocketAsync();
await Echo(webSocket);
}
else
{
context.Response.StatusCode = StatusCodes.Status400BadRequest;
}
}
else
{
await next(context);
}
});
也不管用. 有什么建议吗?