как работает /_layouts/1033/error.htm?
-
09-12-2019 - |
Вопрос
Я застрял, и мне нужен кто-то, кто знает sharepoint досконально!
Редактировать
Это не так, не для других ошибок, таких как 404, 403 и т.д., эта ошибка - что-то еще!это отображается только тогда, когда у вас заблокирован тип файла в центре администрирования, и вы переходите к этому заблокированному расширению по URL, например https://site.mysite.com/portal/default.asp, расширение asp является заблокированным типом файлов!затем он покажет вам только страницу error.htm!если бы это был default.aspx, он работал бы как обычно, потому что aspx нет в списке заблокированных типов файлов
ОКОНЧАТЕЛЬНАЯ ПРАВКА
что-то перезаписывает логику, но я не знаю, что именно!
Допустим, вы заблокировали такой тип файла, как asp, в центре администрирования sharepoint.
Теперь вы переходите по URL-адресу и удаляете из расширения .aspx, чтобы оно было .asp
Он показывает html-страницу с ошибкой заголовка и говорит:
Следующие файлы были заблокированы администратором:/портал/default.asp
Он берет эту htm-страницу из 12hive, расположенного по адресу /_layouts/1033/error.htm ,
Я хотел бы перенаправить на пользовательскую страницу, но я не могу, и мне нужно знать, где это error.htm вызывается, чтобы я мог перезаписать его, чтобы вместо этого он переходил на пользовательскую страницу error.aspx!
Я использовал следующее для перенаправления, но это не работает:
HttpContext.Current.Server.ClearError();
HttpContext.Current.Response.Clear();
strCustomAcssDndURL = getAppSettingsValue(m_SiteCollCustError + "-" + strSiteURL);
HttpContext.Current.Response.Redirect(strCustomAcssDndURL, false);
но это разбивается о:
HttpContext.Current.Response.Redirect();
Это выдает ошибку:
Невозможно перенаправить после отправки HTTP-заголовков.
Я немного растерян относительно того, что делать и возможно ли это вообще!Для любой другой ошибки, которую я получаю, приведенный выше код работает отлично!
Любая помощь была бы высоко оценена :)
Решение 3
ОК IV понять это:
INT ININE I создал объект htthapplication и создал обработчик события:
context.EndRequest += new EventHandler(context_AcessDenied);
.
Но этот вопрос был отправлен заголовозу, и я не смог поймать запрос, потому что он отправляется!Так что я сделал, было следующим:
context.BeginRequest += new EventHandler(context_BeginRequest);
.
Я тогда создал даже, что ищет сквозь заблокированный список для файловых программ, которые вы входите в URL-адрес, и если его в списке перенаправляются в правильное местоположение:
private void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication httpApp = sender as HttpApplication;
HttpContext context = httpApp.Context;
string httpUrl = context.Request.Url.ToString();
string strCustomAcssDndURL = string.Empty;
string strSiteURL = string.Empty;
if (!httpUrl.ToLower().Equals(null) && !httpUrl.ToLower().Contains("/_layouts/"))
{
string[] breakURL = httpUrl.Split('.');
int count = breakURL.Length - 1;
string extension = breakURL[count].ToString();
Uri siteUrl = new Uri(httpUrl);
SPWebApplication webApplication = SPWebApplication.Lookup(siteUrl); ;
Collection<string> coll = webApplication.BlockedFileExtensions;
try
{
if (coll.Contains(extension))
{
strSiteURL = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority);
HttpContext.Current.Server.ClearError();
HttpContext.Current.Response.Clear();
strCustomAcssDndURL = getAppSettingsValue(m_SiteCollCustError + "-" + strSiteURL);
HttpContext.Current.Response.Redirect(strCustomAcssDndURL, false);
}
}
catch (Exception a)
{
//
}
}
}
.
Я сохранил другой код обработки ошибок в рамках EndRequest, так как он работал так, как он должен :).Поэтому, как нет статей онлайн Что так когда-либо на эту тему даже на MSDN выглядит как первое решение этой проблемы :) и надеюсь, что это поможет другим, что может прийти в этот вопрос :)
Другие советы
Определение пользовательской страницы ошибки выполняется в Web.config вашего сайта SharePoint.
Если вы пытаетесь перенаправить на странице, попробуйте перенаправить без «httpContext.current»
Вместо того чтобы устанавливать это в web.config, почему бы вам не использовать для этого объектную модель SharePoint?
Вот скрипт PowerShell, который я использовал в прошлом для настройки пользовательской страницы ошибок:
2007:
$webapp = [Microsoft.SharePoint.Administration.SPWebApplication]::Lookup("http://thewebapp")
$webapp.UpdateMappedPage([Microsoft.SharePoint.Administration.SPWebApplication+SPCustomPage]::Error, "/_layouts/yourerrorpage.html")
$webapp.Update($true)
2010:
$webapp = Get-SPWebApplication "http://thewebapp"
$webapp.UpdateMappedPage([Microsoft.SharePoint.Administration.SPWebApplication+SPCustomPage]::Error, "/_layouts/yourerrorpage.html")
$webapp.Update($true)
Таким образом, вы можете установить различные типы ошибок, используя SPWebApplication.SPCustomPage
перечисление.Просто измените часть второй строки (например, "::Error
") для представления соответствующего перечисления.