2016-01-14 43 views
0

我正在写一个web应用程序,我想从AdminControler做未经授权的请求将重定向到AdminController中的登录方法,并为未经授权的用户从UserController重定向到Login方法UserController的。我写了这样的东西,但我得到错误...我的类属性被添加到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.HttpException'的一个例外发生在System.Web.dll中但在用户代码 内的异常没有被处理的:发送所述HTTP标头,该服务器不能附加标题后。

我将不胜感激您的帮助!

+0

该异常是否有内部异常? – Amy

+0

我得到这个:在发送服务器不能附加标头的HTTP标头之后。 – rejencina

+0

看一些这些答案,看看是否有帮助http://stackoverflow.com/questions/4435716/asp-net-response-redirect-not-working-in-application-error – MethodMan

回答

0

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

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

我使用你的代码,和例外是消失了,但OnAuthorization方法仍然被调用,程序将循环。在这之后得到Invalid redirecterror;/ – rejencina

+0

可能需要在发出重定向之前添加这个'HttpContext.Current.ClearError();' – MethodMan

+0

没有修复问题; / – rejencina

相关问题