응답을 사용하여 Server.Transfer ()를 만드는 방법 404 오류가 발생하지 않습니까?

StackOverflow https://stackoverflow.com/questions/2456243

문제

그래서 이것은 시나리오입니다.

모든 로그인 제어 페이지에 대한 기본 클래스가 있습니다.

public class SessionControlledPage : Page
{
    protected virtual void Page_Load(Object sender, EventArgs e)
    {
        Response.AddHeader("Refresh", Convert.ToString(Session.Timeout * 60 + 5));
        if (Session.IsNewSession)
        {
            Response.Redirect("~/login.aspx");
        }
    }
}

그리고 a regularpage.aspx 기본 클래스의 상감 페이지 :

public partial class RegularPage : SessionControlledPage
{
    override protected void Page_Load(Object sender, EventArgs e)
    {
        base.Page_Load(sender, e);

        Server.Transfer("~/otherpage.aspx");
    }
}

이제 원래 URL이라고 가정 해 봅시다 http : //localhost/regularpage.aspx 그리고 그 Session.Timeout = 5. 전송이 발생한 후 새로 고침이 발생하면 문제가 나타납니다. 나는 받고있다 404 Not Found 오류 및 URL이 변경됩니다 http : // localhost/305. 그것을주의해라 5 * 60 + 5 = 305.

왜 이런 일이 일어나고 있는지 아십니까? 해결책이 있습니까?

PD : OtherPage.aspx에서 exeralPage.aspx의 일부 속성에 액세스해야하므로 전송을 사용합니다. 아마도 다른 솔루션도 제공 할 수 있습니다.

도움이 되었습니까?

해결책

BASE.PAGE_LOAD를 호출 해야하는 이유는 거의 없습니다. 그러면 Server.Transfer를 호출하는 것입니다. 정확히 무엇을 성취하려고합니까? 일부 속성에 액세스하는 경우 페이지 객체에 의존하지 않는 일부 비즈니스 로직으로이를 추상화해야합니다.

이것은 또한 404 문제를 일으키는 원인입니다. 이런 일이 일어나려면 문제가 페이지의 렌더링 된 출력에 있어야합니다 (확인). Meta-Refresh 태그 직후에 한 페이지를 잘라낸 다음 새 페이지를 시작하고 ASP.NET가 모든 것을 동일한 응답 스트림에 버리는 것 같습니다. 요컨대, 당신은 잘못하고 있습니다. :) 당신은 잘 배치 된 응답으로 이것을 고칠 수 있을지도 모릅니다. clear ()이지만 여기서는 실제 문제가 아닙니다 ... 새로 고침 태그를 잃을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top