zoukankan      html  css  js  c++  java
  • mvc访问接口时加权限认证

    Action过滤器

    1.OnActionExecuting 
    在Action方法调用前使用,使用场景:如何验证登录等。

    2.OnActionExecuted
    在Action方法调用后,result方法调用前执行,使用场景:异常处理。

    3.OnResultExecuting
    在result执行前发生(在view 呈现前),使用场景:设置客户端缓存,服务器端压缩.

    4.OnResultExecuted
    在result执行后发生,使用场景:异常处理,页面尾部输出调试信息。

    我们在访问接口时有时需要在Hearder头部加上Authorization认证,具体操作如下

    WebApiConfig类中Register方法添加认证控制,然后重写OnActionExecuting 方法

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Web;
    using System.Web.Http;
    using System.Web.Http.Filters;
    
    namespace WebApplication2
    {
        public static class WebApiConfig
        {
            public static void Register(HttpConfiguration config)
            {
                // Web API 配置和服务
    
                // Web API 路由
                config.MapHttpAttributeRoutes();
                config.Filters.Add(new ApiPermissionFilter());  //注册全局API Action过滤器
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );          
            }
    
           
        }
        public class ApiPermissionFilter : ActionFilterAttribute
        {
            public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
            {
                var anonymousAction = actionContext.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>();
                if (!anonymousAction.Any())
                {
                    var  status = GetCurUserInfo(actionContext.Request);
                    if (!status)
                    {
                        actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.Unauthorized, new HttpError("error"));
                        base.OnActionExecuting(actionContext);
                    }
                }
            }
    
            public static bool  GetCurUserInfo(HttpRequestMessage Request)
            {
                var status = false;
                var Authorization = Request.Headers.Authorization;
                if (Authorization != null && Authorization.Scheme == "Basic")
                {
                    //可以针对token做一些其他判断
                    status = true;
                }
                return status;
            }
            }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Http;
    
    namespace WebApplication2.Controllers
    {
        public class TestController : ApiController
        {
            [HttpGet,HttpPost]
            public void GetValue(Message value)
            {
                //{"name":"1","id":"2"}
            }
    
            [HttpGet]
            [AllowAnonymous]//加上这个可忽略token认证
            public void GetValue2(string value)
            {
               
            }
    
        }
    
        public class Message
        {
            public string name { get; set; }
            public string id { get; set; }
        }
    }

     https://www.cnblogs.com/mr-hero/p/5919979.html

  • 相关阅读:
    UVA 11995
    LA 5031
    防卫导弹
    跳马问题
    UVA 11992
    POJ 3264 Balanced Lineup
    0-1背包
    石子合并
    小技巧
    Android广播中有序和无序的区别
  • 原文地址:https://www.cnblogs.com/macT/p/12122876.html
Copyright © 2011-2022 走看看