Response.Redirect се проваля при извикване от вътрешен ASPX

Имам ASPX (PictureGetter.aspx), който зарежда изображения и ги записва в отговора по начин като този:

private void WritePicture()
{
    byte[] bytes = GetBytes(picPath);
    Response.ContentType = "image/jpeg";
    Response.Clear();
    Response.BinaryWrite(bytes);
    Response.End();
}

След това това може да се използва на страници като:

<img src="/path/to/PictureGetter.aspx?some_param=some_value" />

При определени сценарии обаче няма да мога да получа изображение, така че бих искал да пренасоча потребителя към съвсем различна страница:

if (some_condition)
{
    Response.Redirect("/another/path/page.aspx");
}
else
{
    WritePicture();
}

Пренасочването обаче никога не се случва. Опитах Response.Redirect("/another/path/page.aspx", false) и Response.Redirect("/another/path/page.aspx", true), но без резултат. Някакви идеи как мога да поправя това?


person Bullines    schedule 20.11.2009    source източник
comment
И вие наистина сте сигурни, че условието е изпълнено, предполагам?   -  person Fredrik Mörk    schedule 20.11.2009
comment
Да, условието е изпълнено. Ако използвам Firebug или Fiddler, мога дори да видя изпращането на заявката за /another/path/page.aspx, но самата страница в браузъра никога не се пренасочва.   -  person Bullines    schedule 20.11.2009


Отговори (1)


Заявката, към която изпращате пренасочването, не е за страницата, а по-скоро само за изображението. Няма да можете да изпратите пренасочване от сървъра, освен ако заявката, която идва, не е за действителната страница.

За да бъдем по-конкретни: Ако трябва да пренасочите въз основа на някакво условие, трябва да го направите, когато се поиска страницата, на която се хоства изображението. Ако наистина трябва да го направите по начина, който сте изложили (няма да разберете дали трябва да пренасочите, докато не се опита да заредите изображение), ще трябва да го направите с помощта на някакъв объркан javascript от страна на клиента.

person David Hay    schedule 20.11.2009
comment
response.write(‹script›); response.write(document.location.href('/another/path/page.aspx')); response.write(‹/script›); - person adamcodes; 23.11.2009