Ошибка 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(‹сценарий›); response.write(document.location.href('/another/path/page.aspx')); ответ.написать(‹/скрипт›); - person adamcodes; 23.11.2009