重定向(" / Error / UnAuthorized")在ASP.NET MVC中不起作用

时间:2011-05-26 11:10:23

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

有人可以帮我解释为什么以下代码不起作用?调试时不会发生重定向:

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
    base.Initialize(requestContext);

    Redirect("/Error/UnAuthorized");
}

2 个答案:

答案 0 :(得分:4)

以下内容应该有效:

protected override void Initialize(RequestContext requestContext)
{
    base.Initialize(requestContext);
    var url = Url.Action("UnAuthorized", "Error");
    requestContext.HttpContext.Response.Redirect(url);
}

这就是说,你不应该在Initialize方法中进行任何重定向。就个人而言,我从来没有必要覆盖这种方法。更糟糕的是,您似乎正在处理此方法中的授权,这很糟糕。我强烈建议您为此目的使用自定义Authorize属性。

答案 1 :(得分:1)

在MVC中,您应该返回重定向结果,而不是使用Response.Redirect。

另外,我会说你收到的错误(标题已发送),你在请求​​中处理的时间太晚了。

以下是从动作方法重定向的示例。

[HttpGet]
public ActionResult Basecamp()
{
    if (!GetPlanPolicyForUser().IntegrationEnabled)
    {
        Log<ApplicationsController>.Action( "..." );
        return Redirect("/applications/notsupported");
    }
    //...
}