问题描述
我正在 ASP.Net Core 3.1 中构建日志机制。主要思想是在 DB 中记录每个请求的每个活动,其中属性 requestId (GUID) 对于重复/相同的请求是相同的。
- RecordId - 每个请求生成
- RequestId - 对于重复/相同的请求具有相同的值
- 状态 - 200、400 等...
- DateCreated - 记录请求的时间
我需要帮助的是如何为重复/相同的请求获取相同的 RequestId ?
到目前为止,在我的项目中,我创建了一个请求中间件并尝试使用:
- correlationId - 来自 NuGet 包 CorrelationId
- traceId - 来自 HttpContext.TraceIdentifier(甚至不是 GUID 格式,无论如何,我试着看看我是否可以使用一些东西来依赖)
它们都在生成唯一的 id,我不需要。 任何建议或示例都会有所帮助。
解决方法
答案:
var url = "https://localhost:3030/api/attachment/Standard";
Guid requestId;
using (MD5 md5 = MD5.Create())
{
byte[] hash = md5.ComputeHash(Encoding.UTF8.GetBytes(url));
requestId = new Guid(hash);
}
解决:
- 为重复请求生成相同的 requestID
- 由于重新运行 api 时的限制,请勿使用 GetHashCode -> 即使 url 相同,它也会生成不同的代码。
- 考虑如果我们有两个以相同动作长度结尾的网址,“标准和示例”将获得不同的字节输出:
- 标准是 [53,74,61,6e,64,72,64] 字节
- 示例为 [45,78,6d,70,6c,65,73] 字节