Я объединил некоторые из своих веб-приложений в один главный проект ASP.NET MVC; назначая некоторые из них для разделения областей, чтобы к ним можно было получить доступ через субдомены.Может ли ASP.NET MVC Area отображать собственный набор страниц ошибок?
С помощью этого (весьма полезно) ресурс (https://dusted.codes/demystifying-aspnet-mvc-5-error-pages-and-error-logging), я настроил customErrors
и httpErrors
в Web.config
, так что отображаются страницы ошибок. Работает хорошо.
Я буду использовать разные макеты/стиль для области/поддомена, поэтому мне интересно: Как я могу получить Area для отображения собственного набора страниц ошибок?
С текущей настройкой, все субдомены будут отображать основной набор пользовательских ошибок, которые добавляются к customErrors
и httpErrors
секциям (403.html, 404.html, и так далее); но я бы предпочел настроить страницы ошибок для некоторых поддоменов. (Если одна из областей, исключительно занимается отдельный домен в целом, например, это не будет практичным, чтобы служить обычные страницы ошибок.)
Update: Вот сценарий, с кодом, а просил. Спасибо Бен Фостер, который предложил хорошие рекомендации здесь: http://benfoster.io/blog/aspnet-mvc-custom-error-pages2. Я поместил код для 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 верхнего уровня(). Вероятно, это связано с тем, что «MyArea2» больше не находится на пути, поэтому местоположение с дорожкой «MyArea2» не будет выбрано.
Как я могу получить Area (MyArea2), чтобы обслуживать собственные страницы ошибок?
Возможно, настройки местоположения могут помочь, см. Ссылку: https://msdn.microsoft.com/en-us/library/ms178692.aspx. Он может содержать различный контент внутри элемента '' в каждом месте, позволяя устанавливать 'customErrors' и' httpErrors' для разных областей путем указания относительного пути области. –
Спасибо @TetsuyaYamamoto; это был довольно полезный комментарий. Я попробовал элемент «location», и когда мои области являются подпутью моего основного домена (например, http://example.com/MyArea), элемент 'location' работает очень хорошо (' path = "MyArea" ')! Но вот проблема: когда мой регион обслуживается отдельным доменом вообще, я не могу использовать ту же стратегию (например, http://myotherexample.net). – cyrotello
Какая ошибка отображается при доступе к myotherexample.net? Вероятно, в модуле маршрутизации Global.asax может потребоваться дополнительная конфигурация маршрутизации с помощью «HostNameContraint» внутри модуля маршрутизации Global.asax (также включает переписывание URL-адресов в эту область). Кроме того, вы можете изменить свой вопрос, включив в него код области и маршрутизации. –