2011-02-10 30 views
5

Tôi đang học Asp.net MVC 3. Chỉ cần tự hỏi, có cách nào để xác định một phương thức sẽ được thực thi trước khi thực hiện bất kỳ phương pháp nào khác của bất kỳ bộ điều khiển nào không? Điều đó có nghĩa là nó sẽ hoạt động giống như hàm tạo của lớp "Controller" cơ bản.Ở đâu để thực hiện chức năng chung Trong Asp.net MVC

Điều này sẽ bao gồm một số chức năng phổ biến như kiểm tra phiên người dùng/nếu không đăng nhập chuyển hướng đến trang đăng nhập, nếu không, hãy đặt một số giá trị chung từ db sẽ được sử dụng ở mọi nơi trong ứng dụng. Tôi muốn viết chúng chỉ một lần, không muốn gọi một phương thức trên mỗi phương thức điều khiển.

Kính trọng

Trả lời

7

Đó là những bộ lọc hành động dành cho. Có một số đã xây dựng trong khuôn khổ, như AuthorizeAttribute:

 [Authorize(Roles = "Admins")] 
     public ActionResult Index() 
     { 
      return View(); 
     } 

Edit:

Bộ lọc có thể được đặt trên hành động, bộ điều khiển hay bộ lọc toàn cầu.

[Authorize(Roles = "Admins")] 
public class LinkController : Controller 
{ 
    //... 
} 

Bên trong Global.asax

protected void Application_Start() 
    { 
     GlobalFilters.Filters.Add(new AuthorizeAttribute { Roles = "Admins" }); 
     //... 
    } 
+0

sử dụng này, tôi sẽ phải sử dụng filer này trên tất cả các phương pháp của tất cả các bộ điều khiển, phải không? Tôi muốn tránh những bước này. Về cơ bản, nếu tôi mở rộng lớp 'Controller' là MyController và tạo tất cả các bộ điều khiển khác mở rộng 'MyController', nó sẽ hoạt động. Nó là một giải pháp tốt mặc dù (bản thân tôi đã thử nó chưa, tìm kiếm lời khuyên của các chuyên gia)? – Rana

+3

Bạn có thể sử dụng các thuộc tính đó trên cấp điều khiển như thế này: [Cấp phép] lớp công khai ReportsController: Controller {}, hoặc đăng ký Global.asax của bạn là toàn cục cho mọi bộ điều khiển: protected void Application_Start() {GlobalFilters.Filters.Add (new AuthorizeAttribute()); ...} – tpeczek

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