有人可以帮我解释为什么以下代码不起作用?调试时不会发生重定向:
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
base.Initialize(requestContext);
Redirect("/Error/UnAuthorized");
}
答案 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");
}
//...
}