2016-06-25 47 views
8

Jak na ASP.NET websiteJaka jest różnica między filtrem Autoryzuj działanie a filtrem autoryzacji?

Ramy ASP.NET MVC zawiera kilka filtrów Działanie:

  1. OutputCache - Ten filtr działanie buforuje wyjście akcji kontrolera na określony okres czasu.
  2. HandleError - Ten filtr akcji obsługuje błędy powstałe podczas wykonywania akcji kontrolera.
  3. Autoryzuj - ten filtr działań umożliwia ograniczenie dostępu do określonego użytkownika lub roli.

Istnieje również rodzaj filtra w MVC o nazwie "Filtr autoryzacji".

Nie rozumiem, czy atrybut [Authorize] jest filtrem Akcja czy filtrem autoryzacji? A kiedy zostanie wykonany?

Odpowiedz

5

Jaka jest różnica między filtrem Autoryzuj działanie a filtrem autoryzacji?

Brak.

Ta dokumentacja jest najwyraźniej niepoprawna (a jeśli zauważysz w spisie treści, to jest dla wersji 1 i 2 z MVC, więc jest również nieaktualna).

AuthorizeAttribute dziedziczy IAuthorizationFilter, więc jest to w rzeczywistości filtr autoryzacji, a nie filtr akcji. Brak filtra akcji autoryzacji w MVC.

Należy pamiętać, że w przypadku MVC 3 do MVC 5 należy zapoznać się z aktualną dokumentacją Filtering in ASP.NET MVC w przyszłości.

A kiedy zostanie wykonany?

Zgodnie MSDN:

Filtry uruchamiane w następującej kolejności:

  1. filtry zezwoleń
  2. Filtry akcji
  3. Filtry Response
  4. Filtry Wyjątek
+0

Dzięki! To oczyściło moją wątpliwość – TBAG

2

Jestem zdezorientowany, czy [Autoryzacja] atrybut jest filtr Akcja lub filtr autoryzacji?

Atrybut [Authorize] jest filtrem autoryzacji, co można zobaczyć, patrząc na jego kod źródłowy. Jeśli przyjrzeć się bliżej, implementuje interfejs IAuthorizationFilter i zgodnie z dokumentacją, która klasyfikuje go jako filtr autoryzacji.

namespace System.Web.Mvc 
{ 
    // 
    // Summary: 
    //  Specifies that access to a controller or action method is restricted to users 
    //  who meet the authorization requirement. 
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)] 
    public class AuthorizeAttribute : FilterAttribute, IAuthorizationFilter 
......... 

Gdy jest ona realizowana?

Zgodnie z dokumentów:

Membrany są wykonane w kolejności podanej powyżej. Na przykład, filtry autoryzacji są zawsze wykonywane przed filtrami działania i filtry wyjątków są zawsze wykonywane po każdym innym typie filtru .

Zapraszamy do obejrzenia aktualnej dokumentacji dla filtrowania w MVC: https://msdn.microsoft.com/en-us/library/gg416513(VS.98).aspx

wyraźnie stwierdza, że ​​[Autoryzacja] atrybut jest filtr odpowiedzialny:

Klasa AuthorizeAttribute a klasa RequireHttpsAttribute są przykłady filtru autoryzacji. Filtry autoryzacji działają przed każdym innym filtrem.

+0

Widziałem kod źródłowy i to było, kiedy się pomyliłem. Ponieważ jak na stronie ASP.NET http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/understanding-action-filters-cs, ASP.NET MVC framework zawiera kilka Filtry akcji: - Autoryzuj - ten filtr działań umożliwia ograniczenie dostępu do określonego użytkownika lub roli. – TBAG

+0

Ta dokumentacja jest przestarzała, jak sądzę. Zajrzyj tutaj: https://msdn.microsoft.com/en-us/library/gg416513(VS.98).aspx - wyraźnie stwierdza, że ​​atrybut Authorize jest filtrem autoryzacji. – HaukurHaf

+1

Tak .. dziękuję. To oczyściło moje wątpliwości – TBAG