IpFilter
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Web;
using System.Web.Http.Controllers;
using System.Web.Http.Filters;
namespace ***.Common
{
/// <summary>
/// 指定IP地址才能访问API
/// </summary>
public class IpFilter: ActionFilterAttribute
{
/// <summary>
/// 在调用操作方法之前发生。
/// </summary>
/// <param name="actionContext"></param>
public override void OnActionExecuting(HttpActionContext actionContext)
{
base.OnActionExecuting(actionContext);
string ip = IpHelper.GetRealIP();
if (ip ==ConfigurationManager.AppSettings["ApiUrl"])
{
//HttpContext.Current.Response.Write("[]");
//创建响应对象,初始化为成功,没有指定的话本次请求将不会被拦截1**.**.1**.1**
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.OK);
}
}
}
}
IpHelper
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text.RegularExpressions;
using System.Web;
namespace ***.Common
{
/// <summary>
/// 获取客户端IP地址
/// </summary>
public class IpHelper
{
/// <summary>
/// 获取真ip
/// </summary>
/// <returns></returns>
public static string GetRealIP()
{
string result = String.Empty;
result = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
//可能有代理
if (!string.IsNullOrWhiteSpace(result))
{
//没有"." 肯定是非IP格式
if (result.IndexOf(".") == -1)
{
result = null;
}
else
{
//有",",估计多个代理。取第一个不是内网的IP。
if (result.IndexOf(",") != -1)
{
result = result.Replace(" ", string.Empty).Replace("\"", string.Empty);
string[] temparyip = result.Split(",;".ToCharArray());
if (temparyip != null && temparyip.Length > 0)
{
for (int i = 0; i < temparyip.Length; i++)
{
//找到不是内网的地址
if (IsIPAddress(temparyip[i]) && temparyip[i].Substring(0, 3) != "10." && temparyip[i].Substring(0, 7) != "192.168" && temparyip[i].Substring(0, 7) != "172.16.")
{
return temparyip[i];
}
}
}
}
//代理即是IP格式
else if (IsIPAddress(result))
{
return result;
}
//代理中的内容非IP
else
{
result = null;
}
}
}
if (string.IsNullOrWhiteSpace(result))
{
result = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
if (string.IsNullOrWhiteSpace(result))
{
result = System.Web.HttpContext.Current.Request.UserHostAddress;
}
return result;
}
public static bool IsIPAddress(string str)
{
if (string.IsNullOrWhiteSpace(str) || str.Length < 7 || str.Length > 15)
return false;
string regformat = @"^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})";
Regex regex = new Regex(regformat, RegexOptions.IgnoreCase);
return regex.IsMatch(str);
}
}
}