2009-07-24 33 views
5

thể trùng lặp:
Why does my .NET Attribute not perform an action?C# thực thi mã bên thuộc tính tùy chỉnh

Hi,

này có thể soundlike một câu hỏi rất ngớ ngẩn và tôi không biết những gì có thể ở đây là tất cả hướng dẫn "thuộc tính tùy chỉnh" trên mạng khá giống nhau và chúng không giải quyết những gì tôi muốn làm. Tôi đã nhìn thấy một số mã ra có mã được viết bên trong các lớp thuộc tính, ví dụ: Logging with ASP.NET MVC Action Filters và tôi tự hỏi làm thế nào mã này được bao giờ thực hiện.

Nếu tôi có ví dụ đoạn mã sau:

public class Test 
{ 
    [RestrictedAttribute("RegisteredMember")] 
    public void DoSomething() 
    { 
     //this code can only be executed if the logged-in user 
     //is a member of the RegisteredMember group 
    } 
} 

Sau đó, tùy chỉnh thuộc tính RestrictedAttribute sẽ là một cái gì đó như thế này:

[AttributeUsage(AttributeTargets.Method)] 
public class RestrictedAttribute : System.Attribute 
{ 
    /// <summary> 
    /// Make this code restricted to users with a required role 
    /// </summary> 
    /// <param name="requiredRole">The role required to execute this method</param> 
    public RestrictedAttribute(string requiredRole) 
    { 
     //validate if member is in role, else throw exception 
     throw new MemberNotInRoleException(requiredRole); 
    } 
    public new string ToString() { 
     return "Access needs to be granted"; 
    } 

} 

Bây giờ vấn đề là tôi không thể có được MemberNotInRoleException được ném khi tôi thực thi phương thức Test.DoSomething().

Có lẽ tôi chỉ thiếu toàn bộ khái niệm thuộc tính tùy chỉnh, vui lòng giải thích.

+0

Dupe: http://stackoverflow.com/questions/1164978/c-attribute-actions-and-instance-values ​​ –

+2

Bạn cần kế thừa thuộc tính của mình từ ActionFilterAttribute và ghi đè phương thức OnActionExecuting để làm cho nó hoạt động trong MVC . –

+1

Tôi không nghĩ rằng đây là một bản dupe chính xác, vì đó là hành vi MCV đang giải quyết vấn đề, tham chiếu của Mehrdad chỉ định các thuộc tính trực tiếp và là một cuộc gọi tốt, nhưng có một sắc thái ở đây có thể giúp người dùng MVC cố gắng giải quyết các mối quan tâm trong các giải pháp của họ, chẳng hạn như xác thực và tuần tự hóa JSON/XML. –

Trả lời

2

Cách bạn nhìn vào âm thanh của thuộc tính ngay từ đầu, nhưng hãy suy nghĩ lại. Những gì bạn đang thực sự làm là trang trí lớp học của bạn hoặc bất cứ điều gì để một cái gì đó mà làm việc với nó có thể đưa ra quyết định, không phải để bản thân lớp học có thể đưa ra quyết định. Điều này đã bị che khuất đối với tôi bằng cách bạn có thể sử dụng các thuộc tính actionfilter trong MVC, trông giống như chúng làm một cái gì đó, nhưng nó là khung công tác chọn ra các sự kiện và sử dụng thuộc tính cho phù hợp. Tôi thường cố gắng nghĩ về các thuộc tính như ý kiến ​​cho chương trình của tôi để làm việc với.

Các vấn đề liên quan