Как получить конкретную ошибку 404 для папки с помощью ASP.NET?
-
06-07-2019 - |
Вопрос
Это немного сложно, и я был бы рад, если бы вы, ребята, могли дать мне несколько советов по этому поводу.
Вот что я хочу сделать:
Пользователь пытается получить доступ к myapp.com/data/123456.mp3
test.mp3 не существует
Система отправляет пользователя на myapp.com/data/error.apsx?file=123456.mp3
Мне это нужно, чтобы справиться с тем, как большая система должна обслуживать mp3-файлы.
Если пользователь пытается получить доступ к myapp.com/otherFolder/notHere.whatever, система обычно возвращает стандартную ошибку 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>
Кажется, это не работает.
Решение
Пользовательские ошибкиhttp://aspnetresources.com/articles/CustomErrorPages.aspx
В вашем web.config.
<customErrors
mode="RemoteOnly"
defaultRedirect="~/errors/GeneralError.aspx"
/>
Другие советы
Первое, что вам нужно сделать, это убедиться, что ASP.NET может обрабатывать эти запросы файлов, поскольку по умолчанию .mp3 не является расширением ASP.NET, и его будет обрабатывать только IIS.
Когда вы справитесь с этим, на ум приходит пара способов сделать это.
Первый — создать HttpModule, который отслеживает событие OnUnhandledException.Поскольку ASP.NET выдает ошибки 404 (и все ошибки HTTP) как исключения типа HttpException, модуль предоставит вам место для перехвата, анализа запроса и перенаправления к вашим собственным целям.
Другой способ — создать файл web.config на интересующем вас уровне папки (помните, что они могут быть вложенными) и создать там раздел customerror.Это проще, но дает гораздо меньше контроля.Учитывая все обстоятельства, я бы в целом отдал предпочтение модулю.
Вероятно, вы можете поместить Web.Config Indide в папку, которую вы хотите поставить определенную ошибку, и поместить в этот веб -конфиг тег CustomError с указанной страницей, или вы можете использовать тег местоположения внутри основного web.config
но я не уверен в этом