ASHX отображается как поврежденное изображение

#c# #asp.net #ashx

#c# #asp.net #ashx

Вопрос:

У меня действительно неприятная проблема с обработчиком ASHX, который отображает изображение captcha. То, что делает его действительно неприятным, заключается в том, что два месяца назад он работал нормально, и когда я вернулся к нему снова сегодня, он перестал работать.

Что у меня есть, так это страница, которая время от времени выдает captcha. Это разметка из примера задачи:

 <img class="challengedtl" src="Challenge.ashx?tkn=0057ea27-4d35-4850-9c6f-7a6fdc9818e2"/>
  

GUID ссылается на запись в таблице SQL, которая содержит фактическое содержимое captcha, а также статус запроса captcha, т. Е. Была ли она обработана, и если да, то правильно ли пользователь ее получил и т.д.

На странице, где найдена эта разметка, изображение отображается как поврежденный jpeg. Когда я удаляю точку останова в методе ASHX ProcessRequest (), я вижу, что ASHX никогда не вызывается.

Когда я извлекаю URL из атрибута source и запускаю его непосредственно из адресной строки в своем браузере, я нажимаю точку останова в ProcessRequest, и изображение captch отображается просто отлично.

Я не верю, что проблема в моем коде ASHX, поскольку он работает, когда я вызываю его напрямую. Проблема, похоже, в том, почему ASHX не вызывается главной страницей. Учитывая, что это работало в феврале, я затрудняюсь объяснить, что происходит.

Я знаю, что с тех пор с моей машиной что-то случилось. Я подозреваю, что обновление Windows или пакет обновления для чего-то. Причина этого в том, что моя обработка captcha включает отслеживание IP-адреса вызывающего абонента. Раньше, когда это работало, мой локальный хост регистрировался как 127.0.0.1 (IPv4), но теперь он регистрируется как :: 1 (IPv6). Вероятно, отвлекающий маневр.

Кто-нибудь знает, что может быть причиной этого, или у вас есть какие-либо предложения по устранению этой проблемы?

Комментарии:

1. Если вы посмотрите на исходный код страницы в вашем браузере (т. Е. Фактически отображаемый HTML), на что это похоже? Каково значение атрибута «src»?

2. Находится ли обработчик в той же папке, что и страница, содержащая html, которую вы опубликовали выше?

3. Решением было переместить ashx в папку с главной страницей. Для потомков ответ на вопрос Джона Скита заключается в том, что атрибут src, показанный в вопросе выше, вырезан непосредственно из отображаемого HTML, поэтому атрибут src выглядит так, как показано.

Ответ №1:

Находится ли обработчик в той же папке, что и страница, содержащая html, которую вы опубликовали выше?

Комментарии:

1. Обработчик не был в той же папке. Оно находилось в корневой папке сайта, но перемещение его в ту же папку, что и страница хостинга, решило проблему. проблема. Я все еще немного смущен тем, почему это работало раньше и перестало работать. В любом случае, я благодарен за решение!

Ответ №2:

Вот две ключевые части:

Когда я удаляю точку останова в методе ASHX ProcessRequest (), я вижу, что ASHX никогда не вызывается.

и

src=»Challenge.ashx?tkn=0057ea27-4d35-4850-9c6f-7a6fdc9818e2″

Соедините их вместе, и мы сможем предположить, что путь в вашем атрибуте src неверен.

Это просто тег изображения. Если html загрузится, он отправит запрос на этот ресурс. Поскольку ваша точка останова не достигнута, это может означать только то, что либо вы не тестируете где-то, что допускает точки останова, либо что он отправляет запрос не в то место.

Это может быть так же просто, как отправка запроса на рабочую версию сайта, использование неправильной схемы (т. Е. https vs http) или где-то отсутствует папка или номер порта. Браузер должен быть в состоянии предоставить вам полный путь к ресурсу — убедитесь, что это соответствует тому, что вы ожидаете.

Комментарии:

1. Я поставил Энди галочку, поскольку он пришел первым, но благодарю вас за подробный, быстрый и точный ответ! Спасибо, Джоэл.