asp.net webapi 全局设置 所有api controller安全认证的方法、判断是否登录的方法
asp.net webapi 全局设置 所有api controller安全认证的方法、判断是否登录的方法
1. 新建AuthAttribute 特性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | public class AuthAttribute : ActionFilterAttribute { public AuthAttribute() { } public override void OnActionExecuting(HttpActionContext actionContext) { var Context = (HttpContextBase)actionContext.Request.Properties[ "MS_HttpContext" ]; if (SkipAuth(actionContext)) //是否该类标记为NoAuch { base .OnActionExecuting(actionContext); return ; } //前端只要把登录成功后获取到的logintoken放入headers里传入即可。不影响正常post get的参数 var logintoken = actionContext.Request.Headers.Contains( "logintoken" ) ? actionContext.Request.Headers.GetValues( "logintoken" ).First() : "" ; var result = Auth(logintoken); if ( string .IsNullOrEmpty(logintoken) || result.Status != JsonModelHelper.EJsonModel.Auth) { Context.Response.ContentType = "application/json" ; Context.Response.Write(JsonConvert.SerializeObject( new JsonModelHelper.JsonModel { Status = JsonModelHelper.EJsonModel.Fail, Information = "失败, 登录信息已过期,请重新登录" })); Context.Response.End();<br> actionContext.Response = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.NoContent); //加上这句,就不会再执行目标action了 } // base.OnActionExecuting(actionContext); } /// <summary> /// 判断类和方法头上的特性是否要进行Action拦截 /// </summary> /// <param name="actionContext"></param> /// <returns></returns> private static bool SkipAuth(HttpActionContext actionContext) { return actionContext.ActionDescriptor.GetCustomAttributes<NoAuthAttribute>().Any() || actionContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes<NoAuthAttribute>().Any(); } } |
2. 新增NoAuthAttribute 特性
1 2 3 4 | [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true )] public class NoAuthAttribute : AuthAttribute { } |
3. 在app_start/WebApiConfig.cs中配置auth过滤全局action
1 2 3 4 5 6 7 8 9 | public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API 配置和服务 //设置全局过滤器 config.Filters.Add( new AuthAttribute()); } } |
4. 设置logincontroller不判断登录状态
1 2 3 4 5 6 7 8 9 10 | [NoAuth] public partial class LoginController : ApiController { /// <summary> /// 登录 /// </summary> /// <param name="adminuser">adminuser</param> /// <returns></returns> public int Post(adminuser adminuser){ return 1;} } |
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
2014-09-07 解决高版本 Google Chrome 扩展程序强制停用问题 -摘自网络