2009-09-07 3 views
0

1 년 전 IIS6에서 작업하기위한 웹 응용 프로그램을 개발했습니다. 이제 우리는 IIS7로 이동하고 있으며, 일부 통합 테스트를 수행 할 것이라고 생각했습니다.IIS7 및 2008 Server에서 CodeBehind에서 ResponseCode를 수동으로 설정하지 못했습니다.

다음 중 하나가 실패합니다.
웹 앱은 검색 결과가 없거나 데이터 기반 애플리케이션이 없을 때 404 또는 500 (Google Advisor 덕분에 ...) 컨테이너가 아직로드되지 않았습니다. IIS6에서이 작업은 훌륭했습니다. 예를 들어 페이지 출력이있었습니다. result.aspx, 일부 메시지 표시 및 지정된 http 상태 반환 (codebehind에서 설정).
IIS7의 경우이 동작이 잘못되었습니다. 코드 비헤이비어에서 http 상태 코드를 설정하면 내 페이지가 더 이상 전달되지 않고 대신 IIS7의 일반 오류 페이지가 표시됩니다.

아니요, customErrors-Section ...으로 더러운 해킹을하고 싶지 않습니다. 방금 ​​원래 동작을 다시 원합니다!
이렇게 할 방법이 있습니까?

편집 :
페이지 다음 고려

<%@ Page Language="C#" AutoEventWireup="true"%> 

<script runat="server"> 
    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 

     this.Response.StatusCode = 404; 
    } 
</script> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     This page should be displayed 
    </div> 
    </form> 
</body> 
</html> 

비스타 + IIS7 = OK
2008 서버 + IIS7 = 일반 오류 페이지

답변

0

당신의 문제는 아마 당신이를 설정하는 시도이다 응답의 본문 (즉, 페이지 내용)을 보내기 시작한 후 상태 코드 (헤더의 일부로 간주 됨)가 메시지에 표시됩니다.

이 문제를 해결하려면 Response.Buffer를 true로 설정 한 다음 404/500 응답 코드를 설정해야한다면 응답 코드를 설정하기 전에 Response.Clear()를 호출하십시오.

protected override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e); 
    this.Response.StatusCode = 404; 

    Response.TrySkipIisCustomErrors = true; 
} 

: 당신이 500분의 404를 보내는 경우합니다 (HTTP 사양이 허용 않지만)를 일반적으로

+0

StatusCode @ OnLoad (웹 서비스에 연락하는 곳)를 설정합니다. 페이지의 출력은 렌더링 메소드에서 일반적으로 작성됩니다. 초기 응답을 지우고 싶지 않습니다. 정상적인 결과 페이지이며, 다른 메시지가 있습니다. –

+0

Response.Buffer를 켜기 만했으나 (응답을 지우지는 않았습니까?) 작동하는지 확인 했습니까? – RobV

+0

아니요 - 이걸 설정합니다. 응답 대기열을 true로 설정하면 도움이되지 않습니다 ... 응답을 취소하지 못합니다 - 상태 코드 만 설정하십시오. –

관련 문제