このルールをファイアウォールで直接処理する方が簡単です。
別の方法として、 IIS レベルでIP セキュリティを構成し、クライアント IP でフィルター処理することもできます。
ただし、ファイアウォールを制御できない場合は、着信 IP アドレスをチェックしてリクエストを許可/拒否するカスタム Authorize 属性を作成できます。
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());
}