Как получить конкретный 404 для папки, использующей ASP.NET? - PullRequest
1 голос
/ 11 сентября 2009

Это немного сложно, и я был бы рад, если бы вы, ребята, могли бы дать мне несколько советов по этому вопросу.
Вот что я хочу сделать:

  • Пользователь пытается получить доступ myapp.com/data/123456.mp3

  • test.mp3 не существует

  • Система отправляет пользователя на myapp.com/data/error.apsx?file=123456.mp3

Мне это нужно для того, чтобы справиться с тем, как большая система должна обслуживать mp3-файлы.

Если пользователь пытается получить доступ к myapp.com/otherFolder/notHere.wh независимо, система обычно возвращает стандартную ошибку 404.

Я знаю, что есть способы указать это в IIS, но мне бы понравилось, если бы было что-то, что я мог бы сделать программно или просто в рамках своего проекта .net.

редактирование:

Я создал файл web.config в myapp.com/data/

.
<?xml version="1.0"?>
<configuration>
    <system.web>
      <customErrors mode="RemoteOnly" defaultRedirect="/data/mp3/full/serveMp3.aspx"/>
    </system.web>
</configuration>

Кажется, это не работает.

Ответы [ 3 ]

2 голосов
/ 11 сентября 2009

Первое, что вам нужно сделать, - убедиться, что ASP.NET обрабатывает эти запросы к файлам, поскольку по умолчанию .mp3 не является расширением ASP.NET, и это будет обрабатываться IIS.

Несколько способов сделать это, как только вы справитесь с этим, приходят на ум.

Первое - создать HttpModule, который наблюдает за событием OnUnhandledException. Поскольку ASP.NET выбрасывает 404 (и все ошибки HTTP) как исключения типа HttpException, модуль предоставит вам место для перехвата, анализа запроса и перенаправления в ваших собственных целях.

Другим способом является создание файла web.config на уровне папок, который вам нужен (помните, что они могут быть вложенными), и создание там раздела customerror. Это более просто, но дает гораздо меньше контроля. Учитывая все вышесказанное, я бы предпочел модуль в целом.

2 голосов
/ 11 сентября 2009

Пользовательские ошибки http://aspnetresources.com/articles/CustomErrorPages.aspx

В вашем web.config.

<customErrors
       mode="RemoteOnly" 
       defaultRedirect="~/errors/GeneralError.aspx" 
/>
0 голосов
/ 11 сентября 2009

возможно, вы могли бы поместить web.config в папку, в которую вы хотите поместить конкретную ошибку, и поместить в эту веб-конфигурацию тег customerror с указанной страницей или вы можете использовать тег местоположения внутри основного web.config

но я не уверен в этом

...