Я использую следующую реализацию для обработки 404 в Sitecore мультисайтового раствора:Sitecore обычай 404 перенаправлять
В пользовательской реализации трубопровода ExecuteRequest,
protected override void RedirectOnItemNotFound(string url)
{
var context = HttpContext.Current;
try
{
// Request the NotFound page
var domain = context.Request.Url.GetComponents(
UriComponents.Scheme | UriComponents.Host,
UriFormat.Unescaped);
string content;
using(var webClient = new WebClient())
{
content = webClient
.DownloadString(string.Concat(domain, url));
}
// The line below is required for IIS 7.5 hosted
// sites or else IIS is gonna display default 404 page
context.Response.TrySkipIisCustomErrors = true;
context.Response.StatusCode = 404;
context.Response.Write(content);
}
catch (Exception ex)
{
Log.Error(string.Format("Failed on URL: {0}. Falling back to default redirection behaviour. Reason for error {1}", url, ex), ex);
// Fall back to default behavior on exceptions
base.RedirectOnItemNotFound(url);
}
context.Response.End();
}
Теперь, как вы можете видеть, если страница 404 (т. е. нет 404 страницы (как определено в параметре ItemNotFound Sitecore в web.config для сайта), то я делаю base.RedirectOnItemNotFound, который пытается сбросить 404, снова возвращаясь к моему пользовательскому обработчику 404 снова и, следовательно, он попадает в цикл перенаправления.
Итак, если кто-то забывает добавить 404 страницу на один из сайтов, тогда он сбрасывает все остальные сайты и переходит в тупик.
Мой вопрос: какой был бы лучший способ справиться с этим сценарием, когда на одном из сайтов нет страницы 404?
Re-throw исключение вместо base.Redirect ..?
Приветствие
Предположим, что мы не можем пойти на глобальную страницу 404 по уважительной причине.В этом случае мне интересно узнать, что было бы лучшим способом сделать его неудачным изящно, не входя в цикл перенаправления. – user446923
Также, если у вас есть предложения по улучшению моего исправленного решения, взятого из нескольких различных статей в блогах выше, это было бы здорово. – user446923
http://marketplace.sitecore.net/en/Modules/Sitecore_Error_Manager.aspx это хороший менеджер ошибок для Sitecore, вы можете посмотреть здесь –