Я объединил некоторые из своих веб-приложений в один основной проект ASP.NET MVC; назначение некоторых из них в отдельные Области, чтобы к ним можно было получить доступ через поддомены.
Используя этот (весьма полезный) ресурс (https://dusted.codes/demystifying-aspnet-mvc-5-error-pages-and-error-logging), я установил customErrors
и httpErrors
в Web.config
, чтобы отображались настраиваемые страницы ошибок. Работает хорошо.
Я буду использовать разный макет / стиль для каждой области / субдомена, поэтому мне интересно: Как я могу заставить область отображать собственный набор страниц ошибок?
При текущей настройке все поддомены будут отображать основной набор настраиваемых ошибок, которые добавляются в разделы customErrors
и httpErrors
(403.html, 404.html и т. Д.); но я бы предпочел специальные страницы ошибок для некоторых поддоменов. (Например, если одна из областей полностью обрабатывается отдельным доменом, обслуживать обычные страницы ошибок будет непрактично.)
Обновление: вот сценарий с кодом в соответствии с запросом. Спасибо Бену Фостеру, который дал здесь хорошее руководство: http://benfoster.io/blog/aspnet-mvc-custom-error-pages 2. Я поместил код customErrors, но не соответствующие httpErrors ... оставил его для краткости.
<system.web>
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/500.aspx">
<error statusCode="404" redirect="~/404.aspx" />
<error statusCode="500" redirect="~/500.aspx" />
</customErrors>
</system.web>
<location path="MyArea1">
<system.web>
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/Areas/MyArea1/500.aspx">
<error statusCode="404" redirect="~/Areas/MyArea1/404.aspx" />
<error statusCode="500" redirect="~/Areas/MyArea1/500.aspx" />
</customErrors>
</system.web>
</location>
<location path="MyArea2">
<system.web>
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/Areas/MyArea2/500.aspx">
<error statusCode="404" redirect="~/Areas/MyArea2/404.aspx" />
<error statusCode="500" redirect="~/Areas/MyArea2/500.aspx" />
</customErrors>
</system.web>
</location>
Приведенный выше код работает хорошо:
- Если я перейду к «example.com/does/not/exist», я получу страницу с ожидаемой ошибкой на
~/404.aspx
. - Если я перейду на «example.com/MyArea1/does/not/exist», я получу страницу с настраиваемой ошибкой на
~/Areas/MyArea1/404.aspx
.
Соревнование:
Теперь я бы хотел, чтобы область (MyArea2) обслуживалась полностью отдельным доменом (например, exampleOnMyOtherDomain.com) с использованием HostDomainConstraint
(как рекомендовано @TetsuyaYamamoto, в комментарии ниже). Ссылка, которая была доступна через «example.com/MyArea2/validlink», теперь будет доступна следующим образом: «exampleOnMyOtherDomain.com/validlink».
Теперь, если я попробую "exampleOnMyOtherDomain.com/does/not/exist", я получу 404 верхнего уровня (~/404.aspx
). Вероятно, это связано с тем, что «MyArea2» больше не находится в пути, поэтому местоположение с путем «MyArea2» не будет выбрано.
Как я могу заставить область (MyArea2) обслуживать собственные страницы ошибок?
<system.web>
в каждом месте, что позволяет устанавливатьcustomErrors
иhttpErrors
для разных областей путем указания относительного пути к области. - person Tetsuya Yamamoto   schedule 13.10.2016location
, и когда мои области являются подпутьем моего основного домена (например, example.com/MyArea ) элементlocation
работает нормально (path="MyArea"
)! Но вот проблема: когда моя зона обслуживается отдельным доменом, я не могу использовать ту же стратегию (например, myotherexample.net). - person cyrotello   schedule 13.10.2016HostNameContraint
внутри модуля маршрутизации Global.asax (также включает перезапись URL-адресов в эту область). Кроме того, вы можете отредактировать свой вопрос, включив в него код зоны и код маршрута. - person Tetsuya Yamamoto   schedule 14.10.2016Application_Error
для обработки ошибок с myotherexample.net наMyArea2
с помощьюRequest.Url.Host
. Кроме того, вы можете настроитьMapRoute
для обработкиMyArea2
как части пути к области перенаправления, за которым следует модуль перезаписи URL-адресов IIS: iis.net/expand/URLRewrite. - person Tetsuya Yamamoto   schedule 15.10.2016