404 Пользовательское перенаправление

#c# #asp.net #redirect #http-status-code-404

#c# #asp.net #перенаправление #http-status-code-404

Вопрос:

Здравствуйте, я пытаюсь выполнить перенаправление, если ответ равен 404, но он работает не так, как ожидалось, можете ли вы, эксперты, увидеть проблему?. Он по-прежнему переходит к общему 404

в моем глобальном.asax

 protected void Application_BeginRequest(Object sender, EventArgs e)
{
       if (Response.Status == "404 Not Found")
        {
            string notFound = "~/custom_notfound.aspx";
            Response.Redirect(notFound);
        } 

}
  

Обновить

Пробовал до сих пор

 (Response.Status == "404 Not Found")
(Response.Status == "404")
(Response.StatusCode == 404)
  

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

1. Вы имели в виду поставить Response.Redirect(notFound ); ?

2. ах, извините за опечатку при публикации, но проблема все еще есть. Спасибо

3. можете ли вы попробовать (ответ. Статус == 404) (я не уверен, что это сработает, но попробуйте)

4. пробовал.. по-прежнему ir не распознает его, и это (ответ. StatusCode == 404), потому что (Ответ. Status == «ожидает строку»), а также пытался (Resonse. Статус == «404») и попытался (ответ. Статус == «404 не найдено») ни один из них не работал

5. (Ответ.status == HttpStatusCode. Не найдено)

Ответ №1:

Вы также можете использовать раздел пользовательских ошибок web.config — как показано здесь

например, в системе.веб-раздел,

 <customErrors mode="On" defaultRedirect="/custom_error.aspx">
    <error statusCode="404" redirect="/custom_notfound.aspx" />
</customErrors>
  

Ответ №2:

Я не думаю, что BeginRequest может знать об ошибках 404. Попробуйте вместо этого реализовать Application_Error . Проверьте, есть ли сервер.GetLastError() является HttpException , и если это так, проверьте статус.

Ответ №3:

Вы можете добавить в свой web.config для выполнения этого перенаправления, вам не нужно использовать Application_BeginRequest для обработки этого.

См. Этот вопрос по ошибке сервера.

Если вы не можете использовать web.config, я бы установил для вашей начальной страницы значение, которого не существует, поставил точку останова в вашем BeginRequest, отладил приложение и посмотрел на запрос, чтобы узнать, как определить, что это 404. Это было бы намного проще определить оптимальное решение.

Если посмотреть на это подробнее, есть HttpStatusCode, который используется в классе HttpWebResponse . Поэтому может иметь смысл использовать другое переопределение приложения, чтобы получить ответ по умолчанию, а затем проверить его статус по перечислению.

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

1. В любом случае, по какой-то причине они хотят, чтобы это было сделано в asax, как это можно было бы сделать там?

Ответ №4:

Вы также можете использовать web.config

 <system.webServer>
  <httpErrors errorMode="Custom" defaultResponseMode="File" >
     <remove statusCode="404" />
     <remove statusCode="500" />
     <error statusCode="404" path="404.html" />
     <error statusCode="500" path="500.html" />
   </httpErrors>
</system.webServer>