在授权失败后,将管理员和用户重定向到不同的页面

时间:2016-01-14 21:24:52

标签: c# asp.net asp.net-mvc owin asp.net-identity-2

我正在编写一个Web应用程序,我想从AdminControler执行未经授权的请求将重定向到AdminController中的Login方法,并且对于未经授权的用户,UserController将重定向到UserController中的Login方法。我写了这样的东西,但是我得到了错误...我的class属性被添加到filterConfig中。

 public class AdminAuthorize : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        var ctx = filterContext.HttpContext.GetOwinContext();
        if (!ctx.Authentication.User.Identity.IsAuthenticated)
        {
            ctx.Authentication.SignOut();
            var controler = (string)filterContext.RouteData.Values["controller"];
            var url = filterContext.HttpContext.Request.FilePath;
            if (controler.Equals("Admin"))
            {
                filterContext.HttpContext.Response.Redirect("~/Admin/Login"); //exception
            }
            else
            {
                filterContext.HttpContext.Response.Redirect("~/Account/Login"); //exception
            }

        }
        else
        {
            base.OnAuthorization(filterContext);
        }

    }
}

异常:System.Web.dll中发生了'System.Web.HttpException'类型的异常,但未在用户代码中处理 内部异常:在发送HTTP标头后,服务器无法附加标头。

我将非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

使用以下代码而不是Response.Redirect。重定向导致标题更改,并且在设置标题后您无法更改标题。

filterContext.Result = new RedirectResult("~/Admin/Login");