404 Custom Redirect - PullRequest
       10

404 Custom Redirect

5 голосов
/ 04 октября 2011

Здравствуйте. Я пытаюсь выполнить перенаправление, если получен ответ 404, но он не работает должным образом, можете ли вы эксперты увидеть проблему ?. Это все еще идет к универсальному 404

в моем Global.asax

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

}

UPDATE

Пока пробовал

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

Ответы [ 4 ]

8 голосов
/ 04 октября 2011

Вы также можете использовать раздел web.config customerrors - , как показано здесь

например. В разделе system.web

<customErrors mode="On" defaultRedirect="/custom_error.aspx">
    <error statusCode="404" redirect="/custom_notfound.aspx" />
</customErrors>
3 голосов
/ 04 октября 2011

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

2 голосов
/ 04 октября 2011

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

См. Этот ServerFault вопрос .

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

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

0 голосов
/ 11 февраля 2014

Вы также можете использовать 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>
...