1

在使用具有域授权的 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"));
   }
}

我收到一个错误,说找不到指定的 url,而文件夹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
    {
    ...
    }

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

4

2 回答 2

3

AuthorizeWithRedirect 看起来不错。但是 MVC 抱怨你没有正确的操作方法。

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

尝试这样的事情:

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

使用带有公共操作方法 Redirect 的当前 TestController。

于 2012-10-10T07:38:04.980 回答
-1

在登录方法之上使用处理错误数据注释

[HandleError]
public ActionResult Login()
{
    //your action method
}
于 2012-10-10T07:37:39.253 回答