WebApi限制IP地址请求

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Http.Filters;
using System.Net.Http;
using System.Net;
using System.Collections;
using System.Text.RegularExpressions;
using System.IO;
using System.Web.UI.WebControls;
using System.Text;
using System.Web.Caching;
using System.Xml.Linq;
namespace IM.WeiXinApi.Filter
{
     public  class AuthorizeAttrbute : System.Web.Http.Filters.AuthorizationFilterAttribute
    {
         public  override  void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
        {
             var ipaddress = GetIpaddress();  // 用户的ip
             object obj =  null;
            obj = GetCache(ipaddress+ " api ");  // 获取请求api的ip列表
            {
                 if (obj ==  null)
                {
                     if (!IpConfig(ipaddress))
                    {
                         // 返回401错误
                        actionContext.Response =  new HttpResponseMessage
                        {
                            Content =  new StringContent( " 当前ip地址 " + ipaddress +  " 无访问权限 ",
                                Encoding.GetEncoding( " UTF-8 "),  " application/json "),
                            StatusCode = HttpStatusCode.Unauthorized
                        };
                         return;
                    }
                     else
                    {
                        SetCache(ipaddress+ " api ", 16);
                    }
                }
            }
             base.OnAuthorization(actionContext);
        }
         public  static  bool IpConfig( string ip)
        {
             string urlIndex =  " ~/Xml/roleip.xml ";
             string FileName = System.Web.HttpContext.Current.Server.MapPath(urlIndex);
            XDocument doc = XDocument.Load(FileName);
             var rel =  from p  in doc.Descendants( " item "where p.Attribute( " ip ").Value.ToLower() == ip  select p;
             return rel !=  null && rel.Count() >  0 ?  true :  false;
        }
         ///   <summary>
        
///  获取当前应用程序指定CacheKey的Cache值
        
///   </summary>
        
///   <param name="CacheKey"></param>
        
///   <returns></returns>
         public  static  object GetCache( string CacheKey)
        {
            System.Web.Caching.Cache objCache = HttpRuntime.Cache;
             return objCache[CacheKey];
        }
         ///   <summary>
        
///   设置缓存
        
///   </summary>
        
///   <param name="CacheKey"></param>
        
///   <param name="objObject"></param>
        
///   <param name="expires_in"></param>
         public  static  void SetCache( string CacheKey,  object objObject,  double expires_in)
        {
            Cache objCache = HttpRuntime.Cache;
            objCache.Insert(CacheKey, objObject,  null, DateTime.Now.AddHours(expires_in), Cache.NoSlidingExpiration);
        }
         ///   <summary>
        
///    获取IP地址
        
///   </summary>
        
///   <returns></returns>
         public  static  string GetIpaddress()
        {
             string result = String.Empty;
            result = HttpContext.Current.Request.ServerVariables[ " HTTP_CDN_SRC_IP "];
             if ( string.IsNullOrEmpty(result))
                result = HttpContext.Current.Request.ServerVariables[ " REMOTE_ADDR "];

             if ( string.IsNullOrEmpty(result))
                result = HttpContext.Current.Request.UserHostAddress;

             if ( string.IsNullOrEmpty(result) || !IsIP(result))
                 return  " 127.0.0.1 ";

             return result;
        }
         public  static  bool IsIP( string ip)
        {
             return Regex.IsMatch(ip,  " ^((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)$ ");
        }
    }
}

转载于:https://www.cnblogs.com/nzcblog/p/5073871.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值