我只需要在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方法。
答案 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);
}
}
}