如何在授权失败时重定向到不同的视图?

时间:2012-10-10 07:28:05

标签: c# asp.net-mvc-3

将mvc内网模板与域授权一起使用时,如何根据控制器重定向到授权失败的某个错误页面?

所以,我有一个控制器类:

    [AuthorizeWithRedirect(Users = @"user")]
    public class MyController : Controller
    {
    ...
    }

默认情况下,我没有重定向到任何地方。如果我在另一个用户下打开页面,我只看到一个空白页面。问题是,如果授权失败,我希望将请求重定向到不同控制器的不同页面。也就是说,MyController的一个页面,其他控制器的另一个页面等。

我知道我可以从AuthorizeAttribute派生并覆盖HandleUnauthorizedRequest方法。但我无法使其发挥作用:

public class AuthorizeWithRedirect : AuthorizeAttribute
{
   protected override void HandleUnauthorizedRequest(AuthorizationContext context)
   {
       UrlHelper urlHelper = new UrlHelper(context.RequestContext);
       context.Result = new RedirectResult(urlHelper.Action("MyErrorPage"));
   }
}

我收到错误,说未找到指定的网址,而MyErrorPage.cshtml文件夹中存在Views\Shared

修改

    [Authorize(Users = @"user")]//should be redirected to ErrorPage1
    public class MyController1 : Controller
    {
    ...
    }

    [Authorize(Users = @"user")]//should be redirected to ErrorPage2
    public class MyController2 : Controller
    {
    ...
    }

即,同一个授权失败的不同控制器的不同错误页面

2 个答案:

答案 0 :(得分:3)

AuthorizeWithRedirect看起来不错。 但MVC抱怨你没有正确的行动方法。

这里的观点不是问题。控制器和操作方法是。

尝试这样的事情:

context.Result = new RedirectResult(urlHelper.Action("Test", "Redirect"));

目前的TestController具有公共操作方法Redirect。

答案 1 :(得分:-1)

在登录方法

之上使用句柄错误数据注释
[HandleError]
public ActionResult Login()
{
    //your action method
}