コードでリダイレクト ループが発生している原因はわかっていますが、修正方法がわかりません。まず、私のコード。
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");
}
}
コードのポイントは、後のページでクエリ文字列が提供された場合に備えて、まず SWITCH() メソッドでクエリ文字列をチェックすることです。次に、ログインしている現在の AD ユーザー名を取得し、ユーザー データベースをチェックして、ユーザーがアクティブとマークされているかどうかを確認します。その場合、ページを通常どおりロードできるため、何もしません。そうでない場合は、同じページにリダイレクトしますが、Error_ID を追加して、ユーザーにアクセス権がないことを示す別のビューを表示できるようにします。これがリダイレクトループの原因であると確信しています。Redirect Loop を排除する方法について何か考えがある人はいますか? a を実行してから、リダイレクトを実行しようとしましたがRequest.Url.ToString()
、それも!var.Contains
機能しませんでした。
編集:誰かが に代わるものを持っているかどうか聞いてみたいことに注意してくださいResponse.Redirect()
。それは機能しますが、もともと私は and を使用Response.End()
していましたが、それではコードの実行が許可されなかったので、私がやりたいことを行うためにResponse.Redirect()
andを使用することにしました。QueryString