目的:实现每个访问服务器的接口进行过滤
引用:
1.新建类:AuthorizeFilterAttribute
public class AuthorizeFilterAttribute : IAuthorizationFilter
{
public bool AllowMultiple => throw new NotImplementedException();
public Task<HttpResponseMessage> ExecuteAuthorizationFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func<Task<HttpResponseMessage>> continuation)
{
//自己过滤的方法逻辑
return await continuation();
}
}
2.在App_Start文件中新建AutoFacConfig类
public class AutoFacConfig
{
public static void InitAutoFac()
{
//得到你的HttpConfiguration.
var configuration = GlobalConfiguration.Configuration;
var builder = new ContainerBuilder();
//注册控制器
builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
//可选:注册Autofac过滤器提供商.
builder.RegisterWebApiFilterProvider(configuration);
var webapiAssembly = Assembly.Load("Service");
//注册webapi项目中现实了IAuthorizationFilter接口或者实现了IActionFilter接口的非抽象过滤器类
builder.RegisterAssemblyTypes(webapiAssembly).Where(r => !r.IsAbstract &&
(typeof(IAuthorizationFilter).IsAssignableFrom(r)) || typeof(IActionFilter).IsAssignableFrom(r)).PropertiesAutowired();
IContainer container = builder.Build();
//将依赖关系解析器设置为Autofac。
var resolver = new AutofacWebApiDependencyResolver(container);
configuration.DependencyResolver = resolver;
}
}
3.正在WebApiConfigpei'配置过滤器
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API 配置和服务
// Web API 路由
config.MapHttpAttributeRoutes();
//跨域配置
config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
//var builder = new ContainerBuilder();
//var container = builder.Build();
//config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
注册路由过滤器
//builder.Register(c => new AuthorizeFilterAttribute()).AsWebApiActionFilterFor<BaseController>().InstancePerApiRequest();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
#region 统一注册过滤器
var webapiAss = Assembly.Load("Service");
//从webapiAss中拿到所有实现了IAuthorizationFilter接口,或者实现了IActionFilter接口的非抽象过滤器类
var filters = webapiAss.GetTypes().Where(r => !r.IsAbstract && (typeof(IAuthorizationFilter).IsAssignableFrom(r) || typeof(IActionFilter).IsAssignableFrom(r)));
foreach (var item in filters)
{
//从IOC容器中拿到过滤器类对象(因为过滤器都是实现了IFilter接口的,所有这里以IFilter接口来接收)
IFilter filter = (IFilter)GlobalConfziiguration.Configuration.DependencyResolver.GetService(item);
config.Filters.Add(filter); //注册过滤器
}
#endregion
}
}
4.在Global.asax加载程序
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AutoFacConfig.InitAutoFac();//调用InitAutoFac()方法执行
GlobalConfiguration.Configure(WebApiConfig.Register);
}
}
5.这个是全部控制器都会过滤
6.