动态Ip对运行时的限制

时间:2015-03-31 11:46:29

标签: asp.net-mvc iis dynamic-ip

我想在运行时添加/删除对MVC 5项目的IP限制。

我进行了搜索并找到了两种方法。

  1. 在运行时更改动态Ip限制模块。

    using System;
    using System.Text;
    using Microsoft.Web.Administration;
    
    internal static class Sample
        {
           private static void Main()
           {
              using (ServerManager serverManager = new ServerManager())
              {
                 Configuration config = serverManager.GetApplicationHostConfiguration();
                 ConfigurationSection ipSecuritySection = config.GetSection("system.webServer/security/ipSecurity", "Default Web Site");
                 ConfigurationElementCollection ipSecurityCollection = ipSecuritySection.GetCollection();
    
    
    
       ConfigurationElement addElement = ipSecurityCollection.CreateElement("add");
         addElement["ipAddress"] = @"192.168.100.1";
         addElement["allowed"] = false;
         ipSecurityCollection.Add(addElement);
    
         ConfigurationElement addElement1 = ipSecurityCollection.CreateElement("add");
         addElement1["ipAddress"] = @"169.254.0.0";
         addElement1["subnetMask"] = @"255.255.0.0";
         addElement1["allowed"] = false;
         ipSecurityCollection.Add(addElement1);
    
         serverManager.CommitChanges();
             }
           }
         }
    
  2. 这样,serverManager.CommitChanges重新启动IIS或应用程序吗?

    1. Best way to implement request throttling in ASP.NET MVC?

    2. 我将为此目的使用限制。

      如果应用程序或IIS尚未重新启动,我宁愿采用第一种方式,因为它位于IIS级别。

      你有什么建议是最好的还是其他方法?

1 个答案:

答案 0 :(得分:1)

首先重启应用程序。第二种方法是处理行动级别(已经创建了对象)。

因此,我在Begin_Request上阻止/重定向请求。我正在添加我要阻止缓存的ips。然后我在开始请求时读取缓存值,如果请求ip在黑名单中我将其重定向到404.html。

  private void Application_BeginRequest(object sender, EventArgs e)
    {
        using (var mylifeTimeScope = IoCBootstrap.Container.BeginLifetimeScope())
        {

            var ipHelper = mylifeTimeScope.Resolve<IIpHelper>();
            if (ipHelper.BlackListIp())
            {
                HttpContext.Current.Response.StatusCode = 404;
                HttpContext.Current.Response.Redirect("404.html");
            }
         }
    }

ipHelper.BlackListIp()检查ip是否在黑名单中。