2017-10-20 47 views
0

我想创建一个拦截器并将其注册到Simple Injector中。我创建了一个基于Simple Injector教程的拦截器(here)。在Simple Injector中创建和运行拦截器

拦截器将用于授权用户,我需要读取方法参数,然后检查用户是否有权执行该方法。

请注意,有一个授权属性接收执行方法的名称。

例子:

[Authorize("SaveProductsAuthorization")] 
public void SaveProducts(filter, dataToSave) 
{...} 

这里是拦截注册

container.InterceptWith<MedTimeAuthorizeInterceptor>(
    serviceType => serviceType == typeof(IInterceptionEnabler)); 

container.RegisterSingleton<AuthorizeInterceptor>(); 

在我ProfessionalController有一个IInterceptionEnable,像这样:

public class ProfissionalController : ApiController, IInterceptionEnabler 

我把一个破发点到拦截方法在授权拦截器中,没有发生任何事情。

这里有什么问题?也许拦截登记是错误的?

回答

1

拦截只能应用于返回的接口。然而,你试图拦截一个控制器,但控制器总是返回其具体类型,并且具体类型不能被拦截

在这里并不重要,控制器执行IInterceptionEnabler;只有在您致电GetInstance<IInterceptionEnabler>()时才会进行截取。