전화 Response.Redirect(someUrl)
하면 다음과 같은 HttpException이 발생합니다.
HTTP 헤더를 보낸 후에는 리디렉션 할 수 없습니다.
왜 이것을 얻습니까? 이 문제를 어떻게 해결할 수 있습니까?
답변
에 대한 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");
답변
콘텐츠를 클라이언트에 보내면 HTTP 헤더가 이미 전송되었습니다. Response.Redirect()
호출은 브라우저가 다른 URL을 요청할 수 있도록 헤더의 특별한 정보를 전송하여 작동합니다.
헤더가 이미 전송되었으므로 asp.net은 원하는 작업을 수행 할 수 없습니다 (헤더 수정).
a) 다른 작업을 수행하기 전에 리디렉션을 수행하거나 b) Response.Buffer = true
다른 작업을 수행하기 전에 사용 을 시도하여 전체 페이지가 실행될 때까지 출력이 클라이언트에 전송되지 않도록 할 수 있습니다.
답변
리디렉션은 HTTP 메시지의 첫 번째 줄이 ” HTTP/1.x 3xx Redirect Reason
“인 경우에만 발생할 수 있습니다 .
이미 Response.Write()
일부 헤더를 호출 하거나 설정 했다면 리디렉션하기에 너무 늦을 것입니다. Response.Headers.Clear()
리디렉션 전에 전화를 걸어 도움이되는지 확인할 수 있습니다 .
답변
버퍼링 옵션을 false로 설정했는지 확인하십시오 (기본적으로 true). response.redirect가 작동하려면
- 버퍼링이 참이어야합니다.
- 기본 버퍼 크기를 초과하는 response.write를 사용하여 더 많은 데이터를 보내지 않아야합니다 (이 경우 자체적으로 플러시되어 헤더가 전송 됨). 따라서 리디렉션을 허용하지 않습니다.
답변
return RedirectPermanent(myUrl)
나를 위해 일한 사용
답변
아래에 언급 된 코드를 사용할 수도 있습니다.
Response.Write("<script type='text/javascript'>"); Response.Write("window.location = '" + redirect url + "'</script>");Response.Flush();
답변
이에 대한 간단한 대답이 하나 있습니다. 헤더를 보내기 전에 텍스트 또는 페이지의 출력과 관련된 다른 것을 출력했습니다. 이는 해당 오류가 발생하는 이유에 영향을줍니다.
가능한 출력에 대한 코드를 확인하거나 헤더를 메소드 맨 위에 놓아 먼저 전송되도록 할 수 있습니다.
