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

C# 如何重定向到授权失败的不同视图?,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,使用具有域授权的mvc intranet模板时,如何根据控制器重定向到授权失败的特定错误页面 因此,我有一个控制器类: [AuthorizeWithRedirect(Users = @"user")] public class MyController : Controller { ... } 默认情况下,我不会被重定向到任何地方。如果我在另一个用户下打开页面,我只能看到一个空白页面。问题是,如果授权失败,我希望将请求重定向到不同控制器的不同页面。也就是

使用具有域授权的mvc intranet模板时,如何根据控制器重定向到授权失败的特定错误页面

因此,我有一个控制器类:

    [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
    {
    ...
    }

也就是说,同一授权故障上不同控制器的不同错误页面在登录方法顶部使用句柄错误数据注释

[HandleError]
public ActionResult Login()
{
    //your action method
}

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

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

试着这样做:

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

使用带有公共操作方法重定向的present TestController。

我要重定向到的视图是共享视图。它位于
共享的
文件夹中。那么,我怎样才能重定向到它,请你给我一点建议?像我写的那样制作一个控制器和一个动作,然后这个动作可以返回有问题的视图。从技术上讲,这不是一个重定向,但它可能不是必须的。所需的视图将发送到浏览器。如果您已经有一些类似的控制器和操作,您可以在HandleUnauthorizedRequest.urlHelper.action中使用它们。action始终与控制器及其方法一起使用,而不是直接与视图一起使用。它是有效的。起初,我试图从同一个视图重定向到一个操作方法,但它无法授权…(因此发生了一个infinte循环)),然后我在一个没有任何授权限制的单独视图中执行了相同的操作,it工作者。您能否说,我是否可以有一个更好的方法来解决这种重定向问题?不是从
授权派生的
?抱歉,这只是一个占位符名称。我的意思是HandleError注释将捕获操作方法可能引发的任何异常,然后将用户重定向到指定/默认错误页