Использование HttpModule было бы лучшим способом сделать это. Вы можете использовать это для перехвата любых запросов перед выполнением страницы и перенаправления в форму входа в систему, если требуется.
public class SecurityModule : IHttpModule
{
private HttpApplication m_HttpApplication;
public void Init(HttpApplication context)
{
m_HttpApplication = context;
m_HttpApplication.PreRequestHandlerExecute += new EventHandler(OnPreRequestHandlerExecute);
}
public void Dispose()
{
// Do Nothing
}
private void OnPreRequestHandlerExecute(object sender, EventArgs e)
{
// Get IP address
string ipAddress = m_HttpApplication.Context.Request.UserHostAddress;
// Check if the IP address requires login
bool requiresLogin = ValidateIpAddress(ipAddress);
// Redirect if required
if (requiresLogin)
Response.Redirect("~/Login.aspx", true);
}
private bool ValidateIpAddress(string ipAddress)
{
// This method would check that the IP address is from the local
// network or in the database and return true or false accordingly.
return false;
}
}
Вам также необходимо изменить web.config и добавить ссылку на модуль:
<httpModules>
<add name="SecurityModule" type="MyApp.SecurityModule, MyApp"/>
</httpModules>
Этот код также нуждается в некоторой модификации, чтобы гарантировать, что вошедшие в систему пользователи не будут перенаправлены обратно на страницу входа в систему, но этого должно быть достаточно для начала работы.