我想在运行时添加/删除对MVC 5项目的IP限制。
我进行了搜索并找到了两种方法。
在运行时更改动态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();
}
}
}
这样,serverManager.CommitChanges
重新启动IIS或应用程序吗?
我将为此目的使用限制。
如果应用程序或IIS尚未重新启动,我宁愿采用第一种方式,因为它位于IIS级别。
你有什么建议是最好的还是其他方法?
答案 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是否在黑名单中。