2013-07-05 43 views
2

我正在用ServiceStack構建API。我希望每個請求都有一個唯一的ID,以便我可以通過系統(分發)跟蹤它。我在ServiceStack中爲每個請求分配唯一ID的選項是什麼?

我有我的合約程序集包含我的API的DTOs,所以我認爲自然的地方將是使每個Request派生自一個基類,有一個密封的受保護的無參數構造函數,分配一個新的ID(可能GUID是罰款)。

但是,如果您願意,可以通過客戶端使用我的API,而無需使用合同DTOs程序集 - 裸體。在這一點上,客戶端可以分配他們喜歡的任何ID(因爲該屬性將是一個字符串以適應,並且我希望ID分配很快)。

因此,這導致我認爲服務應該在請求到達系統時分配請求ID。所以 - 我現在認爲要做的最好的事情是每個請求的ID屬性都由API驗證爲空,客戶端無法設置它。然後,一個before-everything過濾器爲DTO屬性分配一個值。

這是明智的嗎?

是否有一個更優雅的方式來做到這一點(仍然對赤裸裸的客戶端?)?

回答

2

使用全局請求過濾器會的工作,你可以這樣做:

public class IRequiresUniqueId 
{ 
    public Guid UniqueId { get; set; } 
} 

,然後標記所有要求的DTO你想通過實現上述接口,具有唯一的ID:

public MyRequest : IRequiresUniqueId 
{ 
    public Guid UniqueId { get; set; } 
} 

然後你可以使用全局請求過濾器來設定它們的所有請求的DTO:

this.RequestFilters.Add((httpReq, httpResp, requestDto) => 
{ 
    var requiresUniqueId = requestDto as IRequiresUniqueId; 
    requiresUniqueId.UniqueId = Guid.NewGuid(); 
}); 
+0

所以效果客觀上可能忽視了客戶可能設定的任何價值。謝謝 :) –

相關問題