Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET MVC-如何停止视图子级的呈现身份验证错误时的操作_Asp.net_Asp.net Mvc_Authorization - Fatal编程技术网

ASP.NET MVC-如何停止视图子级的呈现身份验证错误时的操作

ASP.NET MVC-如何停止视图子级的呈现身份验证错误时的操作,asp.net,asp.net-mvc,authorization,Asp.net,Asp.net Mvc,Authorization,在一个Umbraco项目中,我有一个控制器,它要求用户扮演一个特定的角色,还有一个包含许多子操作的视图。当访问权限不足的用户尝试访问页面时,他们应该会看到错误消息。到目前为止,我已经创建了一个自定义的Authorize属性,如下所示: public override void OnAuthorization(AuthorizationContext filterContext) { if (!filterContext.HttpContext.User.I

在一个Umbraco项目中,我有一个控制器,它要求用户扮演一个特定的角色,还有一个包含许多子操作的视图。当访问权限不足的用户尝试访问页面时,他们应该会看到错误消息。到目前为止,我已经创建了一个自定义的Authorize属性,如下所示:

public override void OnAuthorization(AuthorizationContext filterContext)
        {
            if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
            {
                filterContext.Result = new HttpUnauthorizedResult();
            }
            else if (!AuthorizeCore(filterContext.HttpContext))
            {
                ViewDataDictionary viewData = new ViewDataDictionary();
                viewData.Add("AuthenticationeError", "You do not have sufficient permissions to view this content.");
                filterContext.Result = new ViewResult { ViewName = "~/Views/AuthError.cshtml", ViewData = viewData };                
            }
        }

它完成了这项工作,但有以下错误。在页面加载时,视图从安全控制器调用三个不同的子操作,每次执行此操作时,都会显示一个新的授权错误ViewResult。这种行为能被制止吗?我只想呈现一条错误消息,并在第一个错误后停止进一步的视图处理。另外,我希望用户保持在同一页面上,如果可能的话避免重定向,因为ChildAction我最终返回了空内容结果。最简化的版本是:

if (filterContext.IsChildAction)
{
    filterContext.Result = new ContentResult() { Content = "" };
}

这并没有回答我原来的问题,但解决了问题

对于ChildAction,我最终返回了空的ContentResult。最简化的版本是:

if (filterContext.IsChildAction)
{
    filterContext.Result = new ContentResult() { Content = "" };
}
这并没有回答我原来的问题,但解决了问题