2012-08-29 38 views
6

Tôi chỉ muốn không sử dụng "Người quản lý" cho từng thuộc tính và sử dụng một số điều kiện cho điều đó.Sử dụng tên mục enum như tham số thuộc tính

Nhưng có vẻ như không thể hoặc tôi sai?

Vì vậy, tôi cố gắng thay thế

[RequiresRole("Managers")] 

với

[RequiresRole(HardCodedRoles.Managers.ToString())] 

... 

public enum HardCodedRoles 
{ 
      Administrators, 
      Managers 
} 
+1

Bạn có thể thêm chi tiết hơn để chúng tôi biết những gì nó là bạn đang cố gắng để thực hiện? – Maciej

+0

Tôi chỉ không muốn sử dụng chuỗi "AnyRoleName" và tôi muốn đặt một số mục từ enum thay vì nó. Nhưng VS cho một lỗi Một đối số thuộc tính phải là một biểu thức liên tục, biểu thức typeof hoặc biểu thức tạo mảng của một kiểu tham số thuộc tính –

+1

nếu HardcodedRoles.Managers là một chuỗi const, điều này sẽ hoạt động. Mặt khác, nếu HardcodedRoles là một liệt kê, bạn sẽ phải phân lớp AuthorizeAttribute và thực hiện của riêng bạn, chuyển HardcodedRoles và/hoặc HardcodedRoles [] tới hàm tạo. – Maciej

Trả lời

11

Làm thế nào về một lớp học thay vì một enum , làm cho lớp tĩnh để tránh ai đó mới: ing nó?

public static class HardCodedRoles 
{ 
    public const string Managers = "Managers"; 
    public const string Administrators = "Administrators"; 
} 

[RequiresRole(HardCodedRoles.Managers)] 
+0

Yeah !!! Đây là giải pháp !!!! Chết tiệt! Nó rất dễ dàng!!! :))) –

+1

Điều đó không hạn chế ai đó sử dụng '[RequiresRole (" fred ")]' mặc dù. Điều đó có đủ không? –

2

Lý do bạn thấy lỗi là vì ToString() là một phương pháp và do đó giá trị không thể tính toán tại thời gian biên dịch.

Nếu bạn có thể sử dụng [RequireRole (HardCodedRoles.Managers)] thay vào đó, bạn có thể thực hiện ToString ở nơi khác trong mã của mình và điều này có thể cung cấp cho bạn chức năng bạn cần. Điều này sẽ yêu cầu bạn thay đổi thông số thuộc tính của mình từ string thành HardCodedRoles.

(Tôi tưởng tượng rằng sử dụng một const sẽ không làm việc, bởi vì kiểu của tham số vẫn sẽ string, vì vậy đầu vào sẽ không bị hạn chế.)

+1

Cảm ơn bạn! Bạn có thể vui lòng cung cấp bất kỳ mẫu "Nếu bạn có thể sử dụng [RequireRole (HardCodedRoles.Managers)] thay vào đó, bạn có thể thực hiện ToString ở nơi khác trong mã của bạn và điều này có thể cung cấp cho bạn chức năng bạn cần." –

+0

của? –

+0

Ồ không, cảm ơn! Tôi đã có một câu trả lời rồi. –

1

Bạn cũng có thể sử dụng từ khóa nameof, tức là .:

[RequiresRole(nameof(HardCodedRoles.Managers))] 
Các vấn đề liên quan