Как выполнить логику контроллера в фильтрах в webapi
I have existing logic to validate against database in place.For eg. I have two controllers, ControllerA & ControllerB, i have AuthorizeAttribute on ControllerA, Now when i get request for ControllerA action method, first my Custom AuthorizeAttribute get request it process some authorization logic and then control goes to ControllerA action method, now i want before my ControllerA action method is hit i want some validation on ControllerB to be performed and again control goes to ControllerA action method. In short i want other controller method(some logic) to be executed before actual requested action method is called.
public class ControllerA : ApiController { //some code [MyCustomAuthorizeAttribute] public SomeClass MyMethod() { return new SomeClass(); } } public class ControllerB : ApiController { //some additional existing logic here public bool IsValidUser() { //perform addtional check using existing logic return true; } } public class MyCustomAuthorizeAttribute : AuthorizeAttribute { //Some authorization logic here //I want to execute ControllerB action method IsValidUser() here //If i reieve true the control should go to ControllerA MyMethod }
Что я уже пробовал:
Вместо изменения существующего проверенного и развернутого кода мы можем создать новый фильтр и применить его к требуемым методам.
Richard Deeming
В этом нет никакого смысла. Поместите всю логику авторизации в атрибут authorization. Или переместите его в свой собственный класс и вызовите его оттуда, где он вам нужен.
Если вам нужна дополнительная логика в определенных случаях, создайте второй атрибут авторизации и добавьте оба к соответствующим действиям / контроллерам.