Próbuję zaimplementować niestandardowy atrybut autoryzacji na moich kontrolerach Web API, ale natknąłem się na nieoczekiwane zachowanie.Niestandardowy MVC AuthorizeAttribute dla ASP.NET Web API
<Authorize(Users:="myUser")>
Public Function GetTodoItems() As IQueryable(Of TodoItem)
Powyższy kod działa bardzo dobrze: Pozwoli to „myUser” odzyskać elementy, bot nikt inny nie jest dozwolony dostęp. Jednakże, gdy próbuję tego samego podejścia z moją niestandardową autoryzacją, całe sprawdzanie jest pomijane, a każdy użytkownik może uzyskać dostęp do zasobu. Ani metodyani overidden w mojej klasie pochodnej nie są wywoływane.
<MyAuth(Users:="myUser")>
Public Function GetTodoItems() As IQueryable(Of TodoItem)
Klasa pochodna dziedziczy System.Web.Mvc.AuthorizeAttribute
, a projekt jest wdrażany na IIS, z Windows Authentication & personifikacji włączona i Anonymous Authentication wyłączone.
Jeśli dodaję tę samą niestandardową autoryzację do kontrolera MVC, to działa. Ale na kontrolerach API nic. Jeśli atrybut Authorize
też by nie działał, miałoby to więcej sensu. Czy czegoś brakuje? Czy jest to oczekiwane zachowanie, czy błąd w wersji Beta?
Dzięki, zmienianie przestrzeni nazw działało! Nadal wydaje się dziwne, że używanie 'System.Web.Mvc.AuthorizeAttribute' działa dla Web API, podczas gdy moja klasa, która pochodzi z tej klasy, nie zrobiła tego. –
Wydaje się, że wiele typów duplikatów między MVC i Web API. Być może zostaną one scalone i będziemy mieć jedną próbkę typu w wydaniu. Więc może któryś z obiektów 'AuthorizeAttibute' jest sprawdzany wewnętrznie, tylko zgadnij. –