限制查看权限

时间:2015-09-30 15:04:23

标签: javascript asp.net-mvc asp.net-mvc-4 asp.net-web-api

我正在使用一个使用ASP.NET MVC 5和ASP.NET Web API的项目。基本上,纯javascript Ajax调用用于在单独的项目中访问Web API(而不是MVC Controller)。使用sessionStorage.setItem(而不是HttpContext.Current.Session)将返回当前用户标识和角色保存为会话。 MVC内部控制器的整个点仅用于返回视图。

我面临的挑战是如果用户未针对视图进行身份验证,则将用户重定向到404页面而不会闪烁。目前,sessionStorage.getItem用于确定用户是否在特定cshtml文件中进行了身份验证。由于它是一个javascript解决方案,它会闪烁并在重定向到404之前显示页面。

我知道MVC 5本身带有控制器的授权属性,但它似乎不适用于这种情况。此外,这个项目的结构基本上是固定的,我不允许将sessionStorage.setItem更改为HttpContext.Current.Session。

鉴于上述限制,我似乎无法找到解决方案。

注意:如果用户未经过身份验证,最终结果是在呈现页面之前返回404页面。希望有人可以帮忙解决这个问题。

1 个答案:

答案 0 :(得分:0)

您可以使用Attributes

实现此目的
public class CheckSession : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {



                //if cookie does not exist, redirect to 404 in error controller
                if(!HttpContext.Current.Request.Cookies.AllKeys.Contains("myCookie"))
                    filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary() { { "controller", "Error" }, { "action", "Some404view" } });

                base.OnActionExecuting(filterContext);


        }

    }

然后用

装饰你的动作
[CheckSession()]
public ActionResult SomeAction()
{
}