首页 > 编程语言 >asp.net webapi 全局设置 所有api controller安全认证的方法、判断是否登录的方法

asp.net webapi 全局设置 所有api controller安全认证的方法、判断是否登录的方法

时间:2022-09-07 17:24:40浏览次数:79  
标签:webapi asp logintoken 登录 controller AuthAttribute Context actionContext public

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();
            }

           // 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;}
}

  

标签:webapi,asp,logintoken,登录,controller,AuthAttribute,Context,actionContext,public
From: https://www.cnblogs.com/haoliansheng/p/16666564.html

相关文章

  • net core AspNetCoreRateLimit 流量限制
    1.NuGet添加AspNetCoreRateLimit程序包。2.Startup.cs配置如下ConfigureServices方法新增services.AddOptions();services.AddMemoryCache();......
  • asp 导出txt文件
      <%dimrs,sql,filename,fso,myfile,xSetfso=server.CreateObject("scripting.filesystemobject")filename=Server.MapPath("download.txt")iffso.FileEx......
  • C# ASP.NET常见4种页面缓存方式
    C#ASP.NET常见4种页面缓存方式1、 分布式缓存Memcached教程pdf下载 2、内存缓存,此暂用服务器资源,没钱买好机机的少用,不用!#region内存缓存publicclas......
  • ASP.NET Core02应用启动和依赖注入
    应用启动使用Web模板创建的ASP.NETCore应用程序,应用程序启动代码位于Program.cs文件中。目前应用启动代码支持:RazorPagesMVCcontrollerswithviewsWebAPIw......
  • asp.net web api 如何设置允许后台跨域访问
    publicstaticclassWebApiConfig{publicstaticvoidRegister(HttpConfigurationconfig){//WebAPI配置和服务......
  • ASP.NET Core 01基础知识概述
    Program.cs使用Web模板创建的ASP.NETCore应用包含Program.cs文件中的应用程序启动代码。Program.cs文件中包含:已配置应用所需的服务。应用的请求处理管道定义......
  • Asp.net中引入AspNetPager.dll进行数据分页
    1、在AspNetPager.dl开发者官网【AspNetPager下载(webdiyer.com)】进行下载,或者直接百度搜索下载2、右键单机选中自己项目,打开。3、点击打开bin文件4、将AspNetPage......
  • Asp.Net的各种传值方式
    1.QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。但是对于传......
  • ASP.NET Core 6框架揭秘实例演示[35]:利用Session保留语境
    客户端和服务器基于HTTP的消息交换就好比两个完全没有记忆能力的人在交流,每次单一的HTTP事务体现为一次“一问一答”的对话。单一的对话毫无意义,在在同一语境下针对某个主......
  • IIS 部署ASPNET MVC5项目问题
    如题,部署ASPNETMVC5项目到IIS上的时候遇到一个奇葩的问题,首先项目代码本身应该是没问题的,因为我已经部署成功到一台服务器了,这一台是新的服务器,然后遇到了这个问题。在部......