2 回答

TA貢獻1848條經驗 獲得超10個贊
一種方法是將路由參數的名稱傳遞給屬性,并檢查屬性本身中的路由數據。例如:
[SecureMethod(PermissionRequired = AccessPermissionEnum.DeleteUsers, UserIdsKey = "userIds")]
然后是這樣的:
public AccessPermissionEnum PermissionRequired { get; set; }
public string UserIdsKey { get; set; }
public override void OnActionExecuting(ActionExecutingContext context)
{
// Depending on how you pass your userIds to the action, you
// may need to use something else from context to get the data,
// but it's all available in there.
var userIds = context.ActionArguments[UserIdsKey];
// Do something with the ids.
base.OnActionExecuting(context);
}
雖然這行得通,并且在某些地方確實行之有效,但您應該知道過濾器現在對傳入的參數有深入的了解。在大多數情況下,這通常無關緊要,但這是您需要的一種方法不應該到處使用,因為如果使用不當,最終會增加很多耦合。這是一個不時使用的有用工具。

TA貢獻1852條經驗 獲得超1個贊
不,這是不可能的。
屬性參數僅限于以下類型的常量值:
簡單類型(bool、byte、char、short、int、long、float 和 double)
細繩
系統類型
枚舉
對象(對象類型的屬性參數的參數必須是上述類型之一的常量值。)
任何上述類型的一維數組
您不能嵌套屬性,也不能將非常量值傳遞給屬性參數。即使您可以將屬性參數聲明為類型對象,您傳入的實際參數仍然必須是常量字符串、bool 等(將其聲明為對象僅意味著您可以在每次聲明屬性時使用這些類型中的任何一種) .
- 2 回答
- 0 關注
- 166 瀏覽
添加回答
舉報