2013-04-09 50 views
2

我們有幾個請求過濾器,也利用驗證功能。Servicestack - 操作順序流暢的驗證和請求過濾器

[AttributeUsage(AttributeTargets.Method, Inherited = true)] 
public class MyFilterAttribute : Attribute, IHasRequestFilter 
{ 
    ... 
} 

在APPHOST:

public override void Configure(Container container) 
    { 
     .... 
     Plugins.Add(new ValidationFeature()); 
     .... 
    } 

我需要流利的驗證請求後過濾器運行,因爲一些過濾器將數據添加到DTO那麼有效。我見過Order of Operations,但是這並沒有說明驗證的適用性......至少我沒有看到。

任何幫助,將不勝感激。

回答

5

ValidationFeature像ServiceStack大多數事情只是一個簡單的Plugin其源代碼,可以很容易地通過進入ServiceStack GitHub repo按「T」來激活GitHub's find files功能,並開始在類名的部分輸入發現,如VFe會帶來ValidationFeature直到第一個結果。

裏面的ValidationFeature你可以在IPlugin.Register(IAppHost)功能看看它是如何工作的:

public void Register(IAppHost appHost) 
{ 
    if(!appHost.RequestFilters.Contains(ValidationFilters.RequestFilter)) 
     appHost.RequestFilters.Add(ValidationFilters.RequestFilter); 
} 

其如上所見只是註冊了一個Global Request FilterOrder of Operations指出全局請求過濾器在Filter Attributes之後執行,優先級爲<0,並在優先級爲>=0的過濾器屬性之前執行。

+1

感謝您的回答。我想只有在請求過濾器應用於服務級別而不是方法級別時才適用上述內容。再次查看文檔方法級別篩選器,位於「Action Request Filters(僅限新API)」下。再次感謝您對SS的回答和您的工作。 – ozczecho 2013-04-10 04:08:43

+0

這似乎正是它oczzecho,只是注意到使用操作(而不是服務級別)上的Authenticate屬性相同。驗證發生在驗證(ugh)之後。 – Nicholi 2013-11-26 20:06:43