WebApi自定义权限过滤器注意事项
1、使用表单认证必须在web.config中添加以下配置:
<!--配置表单身份验证-->
<authentication mode="Forms"> <forms name="BearerSparePart" loginUrl="http://localhost:58506/Authorize/SignIn" /> </authentication>
否则 var id = filterContext.HttpContext.User.Identity as FormsIdentity;
会取不到数据
2、Mvc的AuthorizeAttribute与Api是不同的。
WebApi2.0可能会不触发继承于AuthorizationFilterAttribute的类,正确的是要继承于Attribute, System.Web.Http.Filters.IAuthenticationFilter而不是AuthorizationFilterAttribute,注意命名空间。
MVC和API异同:
其中全局注册,针对MVC和API还有一些差异:
MVC在 FilterConfig.cs中注入
filters.Add(new XYHMVCAuthorizeAttribute());
API 在 WebApiConfig.cs 中注入
config.Filters.Add(new XYHAPIAuthorizeAttribute());
3、当继承于Attribute, System.Web.Http.Filters.IAuthenticationFilter时,ChallengeAsync方法是在无权限时返回的结果,如果在AuthenticateAsync方法中已有设定返回,则此处可以直接不作任何操作,如下:
/// <summary> /// 没有权限时执行的方法 /// </summary> /// <param name="context"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public Task ChallengeAsync(HttpAuthenticationChallengeContext context, CancellationToken cancellationToken) { return Task.FromResult(0); }
https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/authentication-filters
浙公网安备 33010602011771号