使用GUID作为ASP.NET Core Web API中的跟踪标识符

目录

背景

跟踪标识符中间件

中间件

使用中间件

测试

Curl

响应标头

重要

参考


背景

HttpContext.TraceIdentifier是表示跟踪日志中的请求的唯一标识符。Kestrel生成此ID{ConnectionId}:{Request number},类似0HLEACIU86PT7:00000005。现在,如果我们想自定义此过程,可以使用中间件分配生成的唯一ID

跟踪标识符中间件

中间件

using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Features;

namespace Cpm.Web.Api.Middlewares
{
    public class TraceIdMiddleware
    {
        private readonly RequestDelegate _next;

        public TraceIdMiddleware(RequestDelegate next)
        {
            _next = next;
        }

        public async Task Invoke(HttpContext context)
        {
            context.TraceIdentifier = Guid.NewGuid().ToString();
            string id = context.TraceIdentifier;
            context.Response.Headers["X-Trace-Id"] = id;
            await _next(context);
        }
    }
}

在这里,我们将Guid.NewGuid().ToString()赋值给ccontext.TraceIdentifier并添加X-Trace-Id到响应标头中。

使用中间件

让我们在Startup.cs或引导程序文件中使用过滤器和中间件,在void Configure(IApplicationBuilder app, IWebHostEnvironment env)中,添加:

/*Middleware*/
app.UseMiddleware<TraceIdMiddleware>();

测试

Curl

curl -X GET "https://localhost:7178/api/Hello" -H  "accept: text/plain"

响应标头

content-type: application/json; charset=utf-8 
date: Mon18 Jul 2022 10:25:18 GMT 
server: Kestrel 
x-trace-id: 0c635697-5606-4417-970f-6cdeebbc60ed 

重要

此中间件应用作管道中的第一个中间件。

参考

https://www.codeproject.com/Tips/5337613/Use-GUID-as-TraceIdentifier-in-ASP-NET-Core-Web-AP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现.NET Core Web Api配置项目启动后向VUE不同界面发送不同的数据,可以使用WebSocket连接和标识符来实现。以下是实现步骤: 1. 在.NET Core Web Api,在Startup.cs文件的Configure方法创建多个WebSocket连接,每个连接对应一个标识符和一个VUE界面。例如: ```csharp public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseWebSockets(); app.MapWebSocketManager("/ws/1", app.ApplicationServices.GetService<MyWebSocketHandler1>()); app.MapWebSocketManager("/ws/2", app.ApplicationServices.GetService<MyWebSocketHandler2>()); } ``` 2. 在.NET Core Web ApiWebSocketHandler类,重载OnConnected方法,在该方法WebSocket连接和对应的标识符存储到字典。例如: ```csharp public override async Task OnConnected(WebSocket socket) { string socketId = Guid.NewGuid().ToString(); _sockets.Add(socketId, socket); } ``` 3. 在.NET Core Web ApiWebSocketHandler类,添加一个SendMessageAsync方法,该方法可以向指定的WebSocket连接发送消息。例如: ```csharp public async Task SendMessageAsync(string socketId, string message) { if (_sockets.TryGetValue(socketId, out WebSocket socket)) { await SendMessageAsync(socket, message); } } ``` 4. 在.NET Core Web Api,通过调用WebSocketHandler类的SendMessageAsync方法向指定的WebSocket连接发送不同的数据。例如: ```csharp var socketId1 = "123"; var message1 = "Hello from WebSocket 1"; await _webSocketHandler1.SendMessageAsync(socketId1, message1); var socketId2 = "456"; var message2 = "Hello from WebSocket 2"; await _webSocketHandler2.SendMessageAsync(socketId2, message2); ``` 5. 在VUE,创建多个WebSocket连接,每个连接对应一个.NET Core Web ApiWebSocket连接。例如: ```javascript var socket1 = new WebSocket('ws://localhost:port/ws/1'); socket1.onmessage = function(event) { var message = event.data; // 处理接收到的消息 }; var socket2 = new WebSocket('ws://localhost:port/ws/2'); socket2.onmessage = function(event) { var message = event.data; // 处理接收到的消息 }; ``` 这样就可以实现.NET Core Web Api配置项目启动后向VUE不同界面发送不同的数据。注意在.NET Core Web ApiWebSocketHandler类需要使用不同的标识符和SendMessageAsync方法。在VUE需要创建多个WebSocket连接来接收不同的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值