asp.net webapi 全局设置 所有api controller安全认证的方法、判断是否登录的方法
2023-09-11 14:21:32 时间
asp.net webapi 全局设置 所有api controller安全认证的方法、判断是否登录的方法
1. 新建AuthAttribute 特性
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();
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 特性
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true)] public class NoAuthAttribute : AuthAttribute { }
3. 在app_start/WebApiConfig.cs中配置auth过滤全局action
public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API 配置和服务 //设置全局过滤器 config.Filters.Add(new AuthAttribute()); } }
4. 设置logincontroller不判断登录状态
[NoAuth] public partial class LoginController : ApiController { /// <summary> /// 登录 /// </summary> /// <param name="adminuser">adminuser</param> /// <returns></returns> public int Post(adminuser adminuser){return 1;} }
相关文章
- asp.net URL中包含中文参数造成乱码的解决方法
- Asp.net 中高亮显示搜索关键字简单方法
- ASP.NET Routing Debugger
- Getting started with ASP.NET Core MVC and Visual Studio
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?
- 漫话Asp.net
- Windows系统服务器IIS7.5 Asp.net支持10万请求的设置方法
- Asp.net打开新窗口或实现超级链接的多种方法!(转)
- Asp.Net读取服务器EXE文件的方法!(超简单实例)
- ASP.NET Web API中通过ETag实现缓存
- 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(1)--后端
- AngularJS使用OData请求ASP.NET Web API资源的思路
- ASP.NET MVC 3 入门级常用设置、技巧和报错
- 《ASP.NET 开发从入门到精通》----1.2 Web技术简介
- 基于ASP.NET+MySQL实现待办任务清单系统【100010180】
- ASP.NET中弹出消息框的几种常见方法
- 一、Linux平台部署ASP.NET、ASP.NET CORE、PHP
- ASP.NET总结
- ASP.NET MVC中实现多个button提交的几种方法
- asp.net Core依赖注入汇总
- 非对称认证方式 可以用在 asp.net webapi 的安全机制里面
- C# Asp.net中的AOP框架 Microsoft.CCI, Mono.Cecil, Typemock Open-AOP API, PostSharp -摘自网络 (可以利用反射 Attribute 进行面向切面编程 可以用在记录整个方法的Log方面)
- ASP.NET Web Pages - 页面布局
- 使用Mono.Cecil辅助ASP.NET MVC使用dynamic类型Model