2016-09-15 42 views
2

我有其中ID參數都標註有CacheType屬性我怎樣才能閱讀網頁API行爲過濾參數屬性值

public Object Get([CacheType(CacheTypes.Venue)]int Id) 
{ 
      .... 
} 

的API方法我可以讀取參數屬性的ActionFilterAttribute內的值

public class CacheOutputAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     //read CacheType value 
    } 
} 
+0

你是否自己綁定了任何東西,還是隻是從網上覆制代碼並要求我們爲你做這件事? –

+0

在反射的幫助下可能會有這種可能 – Fabjan

回答

3

要訪問的當前執行方法的參數集合中的參數omething,你調用

actionContext.ActionDescriptor.GetParameters() 

您可以通過HttpParameterDescriptor的集合迭代,並找到你所需要的參數。你可以通過名稱,索引或任何你認爲合適的方法來完成。

然後,您可以使用在HttpParameterDescriptor類型的對象中定義的方法GetCustomAttributes<TClass>()來檢查參數是否標有TClass類型的屬性。如果您需要屬性的實例來檢查值,只需從結果的屬性集合中獲取(如果找到)。

1

爲了獲取參數值

actionContext.ActionArguments["id"] 

要一切都做得那麼與具有CacheOutput屬性

actionContext.ActionDescriptor.GetParameters().ToList().ForEach(p => 
{ 
    var cacheOutput = p.GetCustomAttributes<CacheOutputAttribute>(); 
    if (cacheOutput.Any()) 
    { 
     // do something 
    } 
}); 
+1

請不要只包含名稱/值對以及方法參數的元數據對嗎? – kiziu

+0

更新的答案與額外的信息 – ubi

相關問題