当我打电话时,Response.Redirect(someUrl)
我得到以下HttpException:
发送HTTP标头后无法重定向。
为什么我得到这个?我该如何解决此问题?
当我打电话时,Response.Redirect(someUrl)
我得到以下HttpException:
发送HTTP标头后无法重定向。
为什么我得到这个?我该如何解决此问题?
Answers:
根据的MSDN文档Response.Redirect(string url)
,当“在发送HTTP标头后尝试重定向”时,它将抛出HttpException。由于Response.Redirect(string url)
使用Http“位置”响应标头(http://en.wikipedia.org/wiki/HTTP_headers#Responses),因此调用它会导致标头发送到客户端。这意味着,如果您第二次调用它,或者在使标头以其他方式发送之后调用它,则会得到HttpException。
防止多次调用Response.Redirect()的一种方法是Response.IsRequestBeingRedirected
在调用属性之前检查属性(bool)。
// Causes headers to be sent to the client (Http "Location" response header)
Response.Redirect("http://www.stackoverflow.com");
if (!Response.IsRequestBeingRedirected)
// Will not be called
Response.Redirect("http://www.google.com");
endResponse
)设置为true来调用重定向。”
Response.IsRequestBeingRedirected
是false,并且我仍然遇到相同的异常(Application_EndRequest
Global.asax中的内部事件方法)。我不明白为什么。
仅当HTTP消息的第一行为“ HTTP/1.x 3xx Redirect Reason
”时,才能发生重定向。
如果您已经调用Response.Write()
或设置了一些标头,那么重定向将为时已晚。您可以尝试Response.Headers.Clear()
在重定向之前致电以查看是否有帮助。
return RedirectToAction("Logout", "Authentication");
该错误
只需检查是否已将缓冲选项设置为false(默认情况下为true)即可。为了响应。重定向到工作,
Response.BufferOutput = true;
在动作中,在控制器中?
您还可以使用下面提到的代码
Response.Write("<script type='text/javascript'>"); Response.Write("window.location = '" + redirect url + "'</script>");Response.Flush();
错误
发送HTTP标头后无法重定向。
System.Web.HttpException(0x80004005):发送HTTP标头后无法重定向。
建议
如果我们使用asp.net mvc的和相同的控制器,并重定向到不同的行动,那么你就不需要写工作..
的Response.Redirect(“ActionName”,“ControllerName”);
最好只使用
return RedirectToAction(“ ActionName”);
或
返回View(“ ViewName”);
有两种方法可以解决此问题:
只需return
在您的后面添加一条语句Response.Redirect(someUrl);
(如果方法签名不是“ void”,那么您将必须返回该“ type”),如下所示:
Response.Redirect(“ Login.aspx”);
返回;
请注意,返回值允许服务器执行重定向...不执行重定向,服务器希望继续执行其余代码...
Response.Redirect(someUrl)
在抛出异常的方法,最后执行的语句。将您Response.Redirect(someUrl)
的字符串替换为名为“ someUrl”的变量VARIABLE,并将其设置为重定向位置...,如下所示://......some code
string someUrl = String.Empty
.....一些逻辑
if (x=y)
{
// comment (original location of Response.Redirect("Login.aspx");)
someUrl = "Login.aspx";
}
......更多代码
//移动您的Response.Redirect到HERE(方法的结尾):
Response.Redirect(someUrl);
return;
return
该做什么?在return
只定义,该方法结束。但是,如果没有任何代码,该方法无论如何都将完成。将url存储在变量中不会改变任何内容,我的意思是:为什么要这么做?字符串是相同的。编译后的东西在字符串和包含字符串的变量之间没有任何区别...:考虑一下x = 5
,因此x为5但5也为5。即使10/2也将是5 ...两者也没有区别