将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
{
...
}
即,同一个授权失败的不同控制器的不同错误页面
答案 0 :(得分:3)
AuthorizeWithRedirect看起来不错。 但MVC抱怨你没有正确的行动方法。
这里的观点不是问题。控制器和操作方法是。
尝试这样的事情:
context.Result = new RedirectResult(urlHelper.Action("Test", "Redirect"));
目前的TestController具有公共操作方法Redirect。
答案 1 :(得分:-1)
在登录方法
之上使用句柄错误数据注释[HandleError]
public ActionResult Login()
{
//your action method
}