응답을 호출할 때 "HTTP 헤더가 전송된 후 리디렉션할 수 없습니다"가 표시되는 이유는 무엇입니까?리디렉션()?
가 내가전때를 부를 때.Response.Redirect(someUrl)다음과 같은 HttpException이 표시됩니다.
HTTP 헤더를 보낸 후에는 리디렉션할 수 없습니다.
이거 왜 나와요?이 문제를 어떻게 해결할 수 있습니까?
『 』 『 』 『 』 『 』 『 』의 문서에 Response.Redirect(string url)된 후 HTTP 헤더가 전송된 후 리디렉션이 시도될 때 HttpException"이 발생합니다. 때부터Response.Redirect(string url)Http "위치" 응답 헤더(http://en.wikipedia.org/wiki/HTTP_headers#Responses), 를 호출하면 헤더가 클라이언트로 전송됩니다.다시 호출하거나 헤더를 다른 방법으로 보낸 후 호출하면 HttpException이 표시됩니다.
응답 호출을 방지하는 한 가지 방법입니다.을 여러 번()을 확인하는 것입니다.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/1.x 3xx Redirect Reason".
이미전경우한에 하셨다면.Response.Write()헤더를 설정하지 않으면 리디렉션하기에는 너무 늦습니다. 전화해 .Response.Headers.Clear()도움이 되는지 확인하기 위해 리디렉션 전에.
버퍼링 옵션을 false(기본적으로 true)로 설정했는지 확인하십시오.response.redirect to work의 경우,
- 버퍼링은 사실이어야 합니다.
- 응답을 사용하여 더 많은 데이터를 보내지 말았어야 합니다.기본 버퍼 크기를 초과하는 쓰기(이 경우 자동으로 플러시되어 헤더가 전송됨)로 인해 리디렉션할 수 없습니다.
용사를 합니다.return RedirectPermanent(myUrl)나를 위해 일했습니다.
아래에 언급된 코드를 사용할 수도 있습니다.
Response.Write("<script type='text/javascript'>"); Response.Write("window.location = '" + redirect url + "'</script>");Response.Flush();
이에 대한 간단한 대답은 다음과 같습니다.헤더를 보내기 전에 페이지에서 텍스트 또는 출력과 관련된 다른 내용을 출력했습니다.이는 오류가 발생하는 이유에 영향을 미칩니다.
코드에서 가능한 출력을 확인하기만 하면 됩니다. 그렇지 않으면 헤더를 메소드 위에 올려 먼저 전송할 수 있습니다.
헤더가 전송된 후 리디렉션하려는 경우(예: 부분적으로 생성된 페이지에서 오류 리디렉션을 수행하는 경우) 일부 클라이언트 Javascript(location.replace 또는 location)를 보낼 수 있습니다.href 등)을 클릭하여 원하는 URL로 리디렉션합니다.물론, 그것은 이미 어떤 HTML을 보냈는지에 따라 다릅니다.
예외 처리기를 추가하여 "HTTP 헤더가 전송된 후 리디렉션할 수 없습니다"를 처리하여 문제가 해결되었습니다.이 오류는 아래 코드와 같습니다.
catch (System.Threading.ThreadAbortException)
{
// To Handle HTTP Exception "Cannot redirect after HTTP headers have been sent".
}
catch (Exception e)
{//Here you can put your context.response.redirect("page.aspx");}
다음을 사용하여 문제를 해결했습니다.대답.경로("CultureEnabled"), 경로 데이터로 리디렉션합니다.반응 대신 값)을 입력합니다.리디렉션.
사용하지 않도록 주의하십시오.Response과 같은 s의 Response.Flush();변경하기 전에 확인합니다.
오류 HTTP 헤더를 보낸 후 리디렉션할 수 없습니다.
파일 . .HttpException(0x80004005):HTTP 헤더를 보낸 후에는 리디렉션할 수 없습니다.
합니다.
만약 우리가 asp.net mvc를 사용하고 동일한 컨트롤러에서 작업하고 다른 액션으로 리디렉션한다면 당신은 쓸 필요가 없습니다.
대답.리디렉션("액션 이름", "컨트롤러 이름");
사용하는 것이 더 좋습니다.
RedirectToAction("ActionName");
또는
턴리뷰뷰("("ViewName");
리디렉션 기능은 '새로 고침' http 헤더를 사용하여 작동할 수 있습니다(30X 코드도 사용할 수 있습니다).머리글이 클라이언트로 전송되면 서버가 리디렉션 명령을 추가할 방법이 없습니다. 너무 늦기 때문입니다.
HTTP 헤더가 전송된 후 리디렉션할 수 없음 메시지가 나타나면 아래 코드를 사용하십시오.
HttpContext.Current.Server.ClearError();
// Response.Headers.Clear();
HttpContext.Current.Response.Redirect("/Home/Login",false);
이 문제를 해결하는 두 가지 방법이 있습니다.
추가하기만 하면 됩니다.
return의 음장 에 있는Response.Redirect(someUrl);가 "이 아니라면.) ( "type" "type" "type" "type" "type" "type" "type" "type" "type" . )대답.리디렉션("Login.aspx");
반환;
반환을 통해 서버는 리디렉션...코드가 없으면 서버가 나머지 코드를 계속 실행하려고 합니다.
- 당신의 것을 만드세요.
Response.Redirect(someUrl)예외를 발생시키는 메서드에서 마지막으로 실행된 문입니다.다음 항목으로 대체합니다.Response.Redirect(someUrl)이름이 "someUrl"인 문자열 변수를 사용하여 리디렉션 위치로 설정...다음과 같이:
//......some code
string someUrl = String.Empty
.....어떤 논리가
if (x=y)
{
// comment (original location of Response.Redirect("Login.aspx");)
someUrl = "Login.aspx";
}
......더 많은 코드
응답을 이동합니다.HERE(메소드의 끝)로 리디렉션합니다.
Response.Redirect(someUrl);
return;
언급URL : https://stackoverflow.com/questions/159523/why-do-i-get-cannot-redirect-after-http-headers-have-been-sent-when-i-call-res
'programing' 카테고리의 다른 글
| 파이썬으로 URL을 요청하고 리디렉션을 따르지 않는 쉬운 방법이 있습니까? (0) | 2023.07.17 |
|---|---|
| VBA 매크로가 32000행 후 충돌합니다. (0) | 2023.07.17 |
| flapdoodle Embedded MongoDB 테스트가 실행되지 않는 이유는 무엇입니까? ('embedded MongoServer'를 생성하면 프로세스 EOF를 시작할 수 없습니다.) (0) | 2023.07.17 |
| 파이썬에서 부울의 반대(부정)를 얻으려면 어떻게 해야 합니까? (0) | 2023.07.17 |
| 자바에서 mongodb 쿼리에서 직접 원시 JSON을 반환하는 방법은 무엇입니까? (0) | 2023.07.17 |