直接在防火墙上处理此规则会更容易。
作为替代方案,您可以在 IIS 级别配置IP 安全性并按客户端 IP 进行过滤。
但是如果你无法控制防火墙,你可以编写一个自定义的 Authorize 属性来检查传入的 IP 地址并允许/拒绝请求:
public class IpBasedAuthorizeAttribute: AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var ip = httpContext.Request.UserHostAddress;
return IsAllowed(ip);
}
private bool IsAllowed(string ip)
{
// TODO: do your checks here and return true or false
// depending on whether the IP address is allowed to
// access the application or not
throw new NotImplementedException();
}
}
然后您可以使用此属性装饰单个控制器/操作,或者如果您希望它应用于所有请求,则将其注册为全局授权属性:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new IpBasedAuthorizeAttribute());
}