2014-10-30 16 views
5
[AuthenticateUser] 
public class HomeController : Controller 
{ 
    // 
    // GET: /Home/ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    [AllowAnonymous] 
    public ActionResult List() 
    { 
     return View(); 
    } 
} 

Cách xóa xác thực cho tác vụ có tên là Danh sách? Vui lòng thông báo ....Có thể vô hiệu hóa bộ lọc xác thực trên một hành động trong bộ điều khiển MVC 5 không?

Mã hóa bộ lọc tùy chỉnh của tôi như sau .. i cũng đã kế thừa cuộc gọi FilterAttribute. Xin cho biết về

public class AuthenticateUserAttribute: FilterAttribute, IAuthenticationFilter 
{ 
    public void OnAuthentication(AuthenticationContext context) 
    { 
     if (this.IsAnonymousAction(context)) 
     { 

     } 

     if (user == "user") 
     { 
      // do nothing 
     } 
     else 
     { 
      context.Result = new HttpUnauthorizedResult(); // mark unauthorized 
     } 
    } 

    public void OnAuthenticationChallenge(AuthenticationChallengeContext context) 
    { 
     if (context.Result == null || context.Result is HttpUnauthorizedResult) 
     { 
      context.Result = new RedirectToRouteResult("Default", 
       new System.Web.Routing.RouteValueDictionary{ 
        {"controller", "Home"}, 
        {"action", "List"}, 
        {"returnUrl", context.HttpContext.Request.RawUrl} 
       }); 
     } 
    } 
} 

Các mã dưới đây tạo ra các thông báo lỗi: Lỗi 1 quá tải tốt nhất phương pháp phù hợp cho 'MVC5Features.Filters.AuthenticateUserAttribute.IsAnonymousAction (System.Web.Mvc.AuthorizationContext) có một số đối số không hợp lệ c : \ users \ kirupananthan.g \ documents \ visual studio 2013 \ Projects \ MVC5Features \ MVC5Features \ Filters \ AuthenticateUserAttribute.cs 16 17 MVC5Features Lỗi 2 Đối số 1: không thể chuyển đổi từ 'System.Web.Mvc.Filters.AuthenticationContext' sang ' System.Web.Mvc.AuthorizationContext 'c: \ users \ kirupananthan.g \ documents \ visual studio 2013 \ Projects \ MVC5Features \ MVC5Features \ Filters \ AuthenticateUserAttribute.cs 16 40 MVC5Features

if (this.IsAnonymousAction(context)) 
+0

Đây có phải là thuộc tính tùy chỉnh của bạn không. Nếu không, có thể '[AllowyAnonymous]' sẽ hoạt động. –

+0

Bộ lọc xác thực được giới thiệu trong MVC 5 .. Không có bộ lọc xác thực được tích hợp .. Đây là Bộ lọc xác thực tùy chỉnh của tôi ... –

+0

nơi được cắm. của 'IsAnonymousAction'? Có gì trong cơ thể nếu có nên có 'return'. –

Trả lời

9

Vì nó là bộ lọc tùy chỉnh, bạn có thể mở rộng nó để xử lý AllowAnonymous (nếu bạn không muốn sử dụng AllowAnonymous, so với cùng kỳ có thể tạo f.e. riêng NoAuthentication):

public class AuthenticateUser : IAuthenticationFilter 
{ 

    public void OnAuthentication(AuthenticationContext filterContext) 
    { 
     if (this.IsAnonymousAction(filterContext)) 
     { 
      return; 
     } 

     // some code 
    } 

    private bool IsAnonymousAction(AuthenticationContext filterContext) 
    { 
     return filterContext.ActionDescriptor 
          .GetCustomAttributes(inherit: true) 
          .OfType<AllowAnonymousAttribute>() 
              //or any attr. you want 
          .Any(); 
    } 
} 
+0

tôi đã thử ví dụ của bạn .. nhưng nó hiển thị lỗi ở trên ... tôi đã bao gồm lỗi bằng cách sửa câu hỏi của tôi ... –

+0

Xem nhận xét của tôi được đề cập. –

+0

câu trả lời của bạn đúng. Tôi đã sao chép chức năng của bạn và dán nó vào mã của tôi. Vì vậy, bạn đã chỉnh sửa câu trả lời của bạn "AuthorizationContext" để "" AuthenticationContext "trong tham số đó. Xin vui lòng tư vấn cho –

1

Thử

[AllowAnonymous] 

thuộc tính

+1

[AllowAnonymous] không hoạt động để vô hiệu hóa bộ lọc xác thực ... Nó là dành cho bộ lọc ủy quyền –

0

Có thể nếu bạn chỉ định Nhóm người dùng cụ thể cho hành động đó và trong bộ lọc xác thực tùy chỉnh của bạn cho phép nhóm này cho mọi thứ.

0

Trong MVC 5 và báo giá từ http://www.dotnetcurry.com/showarticle.aspx?ID=975 Lớp CustomOverrideAuthorizationAttribute được kế thừa từ lớp FilterAttribute và triển khai IOverrideFilter. Giao diện này được sử dụng để xác định các bộ lọc được áp dụng trên bộ điều khiển. Thuộc tính FiltersToOverride trả về kiểu IAuthorizationFilter. Điều này có nghĩa là bộ lọc Ủy quyền được áp dụng trên phụ huynh (bộ điều khiển hoặc lớp ứng dụng toàn cầu) sẽ bị ghi đè

0

Tôi tin rằng bạn nên loại bỏ thuộc tính khỏi bộ điều khiển và đặt nó trên mỗi phương thức hành động ngoại trừ Danh sách.

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