0

私はMVC3で手動認証を行う必要があるだけで、問題は、ユーザーがプロジェクトからURLにアクセスすると、基本クラスに次のコードがあることです:

public class BaseController : Controller
{
    private Usuario loggedUser;
    protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {
        if (requestContext.HttpContext.Request.RawUrl != "/Home/Login")
        {
            if (requestContext.HttpContext.Session["usuario"] != null)
            {
                loggedUser = (Usuario)requestContext.HttpContext.Session["usuario"];
                ViewBag.nomeUsuario = loggedUser.Nome;
                ViewBag.idUsuario = loggedUser.Id;
            }
            else
            {
                requestContext.HttpContext.Response.RedirectPermanent("~/Home/Login");
            }
        }
        base.Initialize(requestContext);
    }

問題は、それらが承認されていない場合、リダイレクトを送信しますが、初期化が要求アクションの処理を続行することです。inicalize メソッドを削除できるため、検証は適切な場所ではないと思います。

4

1 に答える 1

0

このコンテキストではリダイレクトは機能しません。OnAuthorization をオーバーライドして、RedirectResult を返してみてください。

このロジックを属性として実装するとさらに良いでしょう。

public class MyAuthorize : AuthorizeAttribute
{
    private Usuario loggedUser;
    protected override void OnAuthorization(AuthorizationContext filterContext)
    {
        if (filterContext.HttpContext.Request.RawUrl != "/Home/Login")
        {
            if (filterContext.HttpContext.Session["usuario"] != null)
            {
                loggedUser = (Usuario) filterContext.HttpContext.Session["usuario"];
                ViewBag.nomeUsuario = loggedUser.Nome;
                ViewBag.idUsuario = loggedUser.Id;
            }
            else
            {
                filterContext.Result = new RedirectResult("~/Home/Login");
            }
            base.OnAuthorization(filterContext);
        }
    }
}
于 2012-11-09T14:01:59.323 に答える