Я знаю, что вызывает цикл Redirect в моем коде, я просто не знаю, как его исправить. Во-первых, мой код.Решение Redirect Loop
switch (Request.QueryString["Error_ID"])
{
case "1":
// Error Code 1 is when a user attempts to access the Admin section and does not have rights to.
MultiView1.ActiveViewIndex = 1;
break;
case "2":
// Error Code 2 is when a user is not currently Active.
MultiView1.ActiveViewIndex = 2;
break;
default:
// Default is View Index 0 for default access.
MultiView1.ActiveViewIndex = 0;
break;
}
// Get current username.
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
// Test to see if user is Active.
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["HSEProjRegConnectionString1"].ConnectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("SELECT [active] FROM [tbl_Person] WHERE username LIKE @username", conn))
{
cmd.Parameters.AddWithValue("@username", "%" + userName + "%");
var res = cmd.ExecuteScalar();
bool registeredAndActive = (bool)res;
if (registeredAndActive)
{
// Active Condition. The DEFAULT in SWITCH() will take care of displaying content.
}
else
{
// !Active Condition. Shows an alternative version of the default page where the user is told they do not have access.
Response.Redirect("default.aspx?Error_ID=2");
}
}
Точка кода является первой проверки для строки запроса в методе ПЕРЕКЛЮЧАТЕЛЬ() в случае, если один предусмотрен на следующей странице. Затем он захватывает текущее имя пользователя AD, входящее в систему, а затем проверяет базу данных пользователя, чтобы увидеть, отмечен ли пользователь Active. Если это так, он ничего не делает, так как это позволит загружать страницу как обычно. Если нет, то он перенаправляется на ту же страницу, но добавляет Error_ID, чтобы я мог отображать другой вид, говорящий, что пользователь не имеет доступа. Я почти уверен, что это то, откуда происходит цикл переадресации. Есть ли у кого-нибудь идеи о том, как я могу устранить Redirect Loop? Я попытался сделать Request.Url.ToString()
, а затем !var.Contains
, чтобы сделать Перенаправление, но я тоже не смог выполнить эту работу.
EDIT: Я должен отметить, что мне интересно узнать, есть ли у кого-либо альтернативы Response.Redirect()
. Он работает, но изначально я использовал Response.End()
и не позволял запускать какой-либо код, поэтому придумал Response.Redirect()
и QueryString
, чтобы делать то, что я хотел.
Идеально и так просто. Спасибо. Я тоже пошел с решением 2. И спасибо за объяснение. Я знал, что именно там возникла проблема, но не понял, как и почему. – Trido