Исключение определенных методов из Autofac AsWebApiAuthenticationFilterFor - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь добавить аутентификацию для всех методов в контроллере WebApi2 , за исключением для одной конечной точки работоспособности с именем Ping, которая существует на всех контроллерах.У меня аутентификация работает правильно, но я не вижу способа применить исключение.

Я хотел бы сделать что-то вроде Exclude () ниже:

      builder.Register(e => new MyCustomAuthFilter(
      e.Resolve<IInjectedService>(),
      e.Resolve<IAnotherService>()))
      .AsWebApiAuthenticationFilterFor<MyController>()
      .Exclude(Ping)
      .InstancePerRequest();
      builder.RegisterWebApiFilterProvider(config);

1 Ответ

0 голосов
/ 10 октября 2018

К сожалению, в данный момент нет отказа от каждого отдельного элемента.По сути, у вас есть возможность присоединиться ко всему контроллеру или к отдельному действию, но это все.

Есть долгосрочная проблема , где люди хотели бы иметь возможность присоединить регистрацию одного фильтрана несколько контроллеров.Я поднимаю это, потому что это также означает, что вы не можете просто сделать это:

// Doesn't work, this isn't a thing
builder.RegisterType<Filter>()
       .AsWebApiAuthenticationFilterFor<Controller>(c => c.Get())
       .AsWebApiAuthenticationFilterFor<Controller>(c => c.Post());

То есть, в нынешнем виде вы не можете использовать методы, которые хотите включить, и просто выполнять эту работу..

Существует также долгосрочная проблема , позволяющая прикреплять фильтры по предикату.Если бы это было реализовано, вы могли бы сделать что-то вроде этого:

// Doesn't work, this isn't a thing
builder.RegisterType<Filter>()
       .AsWebApiAuthenticationFilterFor<Controller>(method => method.Name != "Delete");

К сожалению, есть тонна работы, поэтому без помощи сообщества в форме PR или какого-либо дополнительного проектавладельцы вы, возможно, не увидите их в ближайшее время.

Лучший вариант, который я мог бы вам предложить, - разделить ваш контроллер на два разных класса - методы, которые вы хотите охватитьодин контроллер, методы вы не в другой контроллер.Извлеките их из общего базового класса, чтобы поделиться логикой.

...