Перехват / перенаправление 404 (ASP.NET) - PullRequest
0 голосов
/ 23 декабря 2010

Я заметил, что когда я запрашиваю страницу в ASP.NET (веб-формы), которая не существует, обработчик StaticFile обрабатывает уведомление об ошибке.

Я хотел бы быть немного более полезным в этихситуации.

Как правильно перехватить этот 404, и в результате запустить некоторый код для перенаправления пользователя?

Два способа, которыми я думал о том, что я в настоящее время не делаюЭто действительно так:

1 - Создать модуль, который в основном выполняет if (!file.exists($url){redirect to $correctedurl})

2 - Изменить файл error.aspx.cs (или страницу ошибок по умолчанию), чтобы сделать что-то подобное (Тьфу!)

Ответы [ 4 ]

1 голос
/ 23 декабря 2010

Есть две области, которые вы должны изменить, чтобы захватить 404. Первый находится в самом IIS, который позаботится о любых файлах, отличных от aspx, таких как css, jpg, js и т. Д. Второй находится в web.config самого приложения, которое будет обрабатывать отсутствующие aspx.

Ссылка ниже показывает, как этого добиться.

см. здесь

1 голос
/ 23 декабря 2010

В веб-конфигурации есть раздел customErrors , в котором можно указать, куда направлять конкретные коды ошибок.

Если вы хотите перехватить запрос при первом его создании, вам потребуетсяGlobal.asax и ответьте на событие BeginRequest.На этом этапе вы можете определить, существует ли файл на сервере и Response.Redirect в контексте.Просто убедитесь, что вы понимаете, что каждый запрос проходит через это событие, включая файлы JS, CSS и изображения. HttpApplication Documentation

0 голосов
/ 06 января 2011

Просто качайте CustomErrors в сети. Config

<configuration>
  <system.web>
    <customErrors defaultRedirect="Error.htm"
                  mode="RemoteOnly">
      <error statusCode="404"
             redirect="~/NotFound.aspx"/>
    </customErrors>
  </system.web>
</configuration>
0 голосов
/ 06 января 2011

Создайте HttpModule, который откликнется на Error событие вашего приложения. Здесь вы можете получить доступ к Exception и StatusCode Ответа, а если код 404 (NotFound), вы можете ответить соответственно. Обычно переписывают запрос, устанавливают StatusCode равным Found и очищают Exception. Таким образом, customErrors в web.config не будет вызвано, и процесс будет $ RequestedUrl -> $ CorrectedURL.

Это пример создания HttpModule, который отвечает на события ошибок в asp.net.

http://www.codeproject.com/KB/aspnet/GlobalErrorHandler.aspx

...