MVC3手动验证

时间:2012-11-09 13:49:49

标签: c# asp.net-mvc-3 authentication manual

我只需要在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方法。

1 个答案:

答案 0 :(得分: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);
        }
    }
}
相关问题