我正在编写一个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标头后,服务器无法附加标头。
我将非常感谢你的帮助!
答案 0 :(得分:0)
使用以下代码而不是Response.Redirect
。重定向导致标题更改,并且在设置标题后您无法更改标题。
filterContext.Result = new RedirectResult("~/Admin/Login");