我正在使用ServiceStack构建一个 API 。我希望每个请求都有一个唯一的 ID,以便我可以通过系统(分布式)对其进行跟踪。
我的合同程序集包含我的 API 的 DTO,因此我认为自然的地方是让每个都Request
派生自一个基类,该基类具有一个密封的受保护的无参数构造函数,该构造函数分配了一个新的 ID(可能是一个 GUID 很好)。
但是,可以通过客户端使用我的 API,而不必使用合约 DTO 程序集——如果你愿意的话,可以裸露。此时,客户可以分配他们喜欢的任何 ID(因为该属性将是一个要容纳的字符串,并且我希望 ID 分配快速)。
因此,这使我认为服务应该在请求到达系统时分配请求 ID。所以 - 我目前认为最好的办法是在每个请求 DTO 上都有一个 ID 属性,该属性被 API 验证为空 - 客户端无法设置它。然后,一个 before-everything 过滤器为 DTO 属性分配一个值。
这合乎情理吗?
有没有更优雅的方法(仍然适用于裸体客户?)?