1

C# を使用する MVC 3 では、検証されていない特定のメソッドをリダイレクトしたいと考えています。ただし、これは機能していないようです。

    private ActionResult m_VerifyLogin()
    {
        if (Session["isLogged"] == null || (int)Session["isLogged"] != 1)
        {
            return RedirectToAction("Index", "Home");
        }

        return View();
    }

私に何ができるか知っている人はいますか?ActionFilterAttribute を作成する場合でも、非常にシンプルにしたいと思います!

- 編集 -

皆さんの回答に感謝します。あなたが尋ねたことのいくつかを試してみたところ、テストの結果、次のようになりました。

カスタム ActionFilterAttribute:

public class IsLoggedAttribute : ActionFilterAttribute
{

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (filterContext.HttpContext.Session["isLogged"] == null || (int) filterContext.HttpContext.Session["isLogged"] != 1)
        {
            filterContext.HttpContext.Response.RedirectToRoute(new { controller = "Home" });
        }

        base.OnActionExecuting(filterContext);
    }

}

そして、ルーティングされたメソッドの上に [IsLogged] をスローできます。

4

2 に答える 2

5

アクション メソッドを作成しますpublicRedirectToAction別のアクション/コントローラーにリダイレクトするために、アクションメソッドがコントローラー基本クラスからのメソッドによって返される可能性があるため、コードは見栄えがします。

public ActionResult m_VerifyLogin()
{
    if (Session["isLogged"] != null || (int)Session["isLogged"] != 1)
    {
        return RedirectToAction("Index", "Home");
    }
    return View();
}

あなたのif発言も少しおかしいです。セッションの値がnullかどうかを確認し、OR論理演算子を使用してそれをキャストして(nullの可能性もあります)、値でテストします。次のようなことを試みることができます。

//If session value is not null then try to cast to int and check if it is not 1.
if (Session["isLogged"] != null || (int)Session["isLogged"] != 1)

コントローラーのIndexアクションが適用されていて、それが現在のユーザーによって無効になっている場合、フォーム認証構成で定義されたログイン ページにリダイレクトされます。また、アクション メソッド名をより適切な名前で使用して、わかりやすい URL を取得することもできます。HomeActionFilterAttributeVerifyLogin

public ActionResult VerifyLogin()
{
    if (Session["isLogged"] != null || (int)Session["isLogged"] != 1)
    {
        return RedirectToAction("Index", "Home");
    }
    return View();
}
于 2013-01-18T18:53:51.460 に答える
2

RedirectToAction()action からRedirectToRouteResult返されたときにリダイレクトを送信するように MVC に指示するオブジェクトを返します。

戻り値を使用せずにメソッドを呼び出しても、何も起こりません。

アクション自体からプライベート メソッドの結果を返す必要があります。

于 2013-01-18T18:57:42.467 に答える