即使全局注册了Filter,它也不会在c# WebAPI中执行
本文关键字:WebAPI 执行 全局 注册 Filter | 更新日期: 2023-09-27 17:53:40
我正在做一个带有过滤器的WebAPI,该过滤器旨在对用户进行身份验证,但是每当我调用GET、PUT、POST或DELETE时,我的过滤器方法都没有被触发。
我已经读过很多这样的回答:
- 使用IAuthorizationFilter
- 使用IAuthenticationFilter
- 使用ActionFilterAttribute
也:
- 在控制器或动作的顶部应用属性
- 在FilterConfig中注册过滤器,在global中注册全局过滤器。Asax
都试过了:
过滤器: namespace CumminsGroup.Filters
{
public class AuthenticationFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
Console.WriteLine("filterContext");
//use filterContext.HttpContext.Request...
}
}
}
ApiController:
namespace CumminsGroup.Controllers
{
[EnableCors(origins: "*", headers: "*", methods: "*")]
[AuthenticationFilter]
public class UserGroupsController : ApiController
{
// GET: api/Groups
public IQueryable<Group> GetGroups()
{
return db.Groups.Include("GroupUsers").Where(u=>u.status=="active");
}
FilterConfig :
namespace CumminsGroup
{
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new AuthenticationFilter());
//filters.Add(new HandleErrorAttribute());
}
}
}
Global.asax:
namespace CumminsGroup
{
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
}
当执行HTTP请求时,过滤器将被跳过。filter函数被调用的唯一时刻是在主页控制器之前,也就是我运行项目的时候。
我错过了什么?
你能区分MVC和WebAPI过滤器吗?
" GlobalConfiguration.Configuration。过滤器"vs"全局过滤器。过滤器"
MVCConfig.RegisterGlobalFilters(GlobalFilters.Filters);
WebApiConfig.RegisterGlobalFilters(GlobalConfiguration.Configuration.Filters);