我們正在嘗試ASP.NET MVC項目中的一些登錄操作。我們的目標是:「如果用戶的IP是不是從我們的內部網,他/她重定向到登錄頁面。否則,只要到我們的索引頁面,我們寫了一些代碼,但我們是在一個循環中Application_BeginRequest用法
GLOBAL。。 ASAX
protected void Application_BeginRequest(object sender, EventArgs e)
{
var request = ((System.Web.HttpApplication) sender).Request;
string ip1 = request.UserHostAddress;
string shortLocalIP;
if (ip1 != null && ip1.Contains("."))
{
string[] ipValues = ip1.Split('.');
shortLocalIP = ipValues[0] +"."+ipValues[1];
}
else
{
shortLocalIP = "192.168";
}
//var ip2 = request.ServerVariables["LOCAL_ADDR"];
//var ip3 = request.ServerVariables["SERVER_ADDR"];
if (shortLocalIP != LOCALIP)
{
if ("/Login/User".Equals(request.RawUrl, StringComparison.InvariantCultureIgnoreCase))
{
return;
}
Response.Clear();
Response.Redirect("/Login/User");
Response.End();
}
}
登錄控制器
public class LoginController : Controller
{
// GET: Login
public ActionResult User()
{
return View();
}
public ActionResult checkAuthentication(FormCollection collection)
{
bool isAuthenticated = new LdapServiceManager().isAuthenticated(collection);
if (isAuthenticated)
{
Response.Redirect("Home/Index");
}
else
{
Response.Redirect("/Login/User");
}
return null;
}
}
LOGIN CSHTML
<form class="login-form" action="/Login/checkAuthentication" method="post" novalidate="novalidate">
當我們按下某個按鈕或其他東西時,Application_BeginRequest會每次觸發。但是我們只是在開始時才需要這些操作。謝謝...
我們應該在GLOBAL.ASAX中使用SESSION START嗎?
你是什麼意思「在開始」?這個用戶第一次打開你的應用程序?但那麼什麼是「這個用戶」?來自此特定IP的用戶?那麼你需要檢查每個請求的IP ......這正是你在做什麼! – Felix
我的意思是如果你打開我的頁面,我們檢查你的IP。如果您的IP來自我們的網絡,請轉到索引。如果您的IP不是來自我們的網絡,請將頁面指向loginPage。在loginPage中,我們需要來自用戶的輸入。當用戶按登錄按鈕時,由於application_beginRequest – Berkin