Добавьте пользовательский обработчик ошибок в начале раздела модулей в Web.config (не вручную)

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/37736

Вопрос

Есть ли способ поставить обработчик ошибок httpmodule в начале раздела модулей в web.config, не делая этого вручную?

Я попробовал дополнительный подход Web.config, как это:

  <add path="configuration/system.webServer/modules" id="{125A654F-9220-42F0-A97A-1746252468DE}">
    <add name="CustomErrorHandler" type="com.handlers.CustomErrorHandler, Assemblyname, Version=4.5.6.7, Culture=neutral, PublicKeyToken=3450345789" />
  </add>
.

Проблема в том, что пользовательский обработчик ошибок должен быть размещен перед стандартным обработчиком. Если вы этого не сделаете, SharePoint обрабатывает сам исключение и обеспечивает стандартную страницу исключения.

Ожидается:

 <modules runAllManagedModulesForAllRequests="true">
  <add name="CustomErrorHandler" type="com.handlers.CustomErrorHandler, Assemblyname, Version=4.5.6.7, Culture=neutral, PublicKeyToken=3450345789" />
  <remove name="FileAuthorization" />
  <remove name="Profile" />
  <remove name="WebDAVModule" />
  <remove name="Session" />
  <add name="SPRequestModule" preCondition="integratedMode" type="Microsoft.SharePoint.ApplicationRuntime.SPRequestModule, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  <add name="SharePoint14Module" preCondition="integratedMode" />
  <add name="StateServiceModule" type="Microsoft.Office.Server.Administration.StateModule, Microsoft.Office.Server, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="RSRedirectModule" type="Microsoft.ReportingServices.SharePoint.Soap.RSRedirectModule, RSSharePointSoapProxy, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
  <add name="PublishingHttpModule" type="Microsoft.SharePoint.Publishing.PublishingHttpModule, Microsoft.SharePoint.Publishing, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
</modules>
.

Результат по дополнительному подходу:

<modules runAllManagedModulesForAllRequests="true">
  <remove name="FileAuthorization" />
  <remove name="Profile" />
  <remove name="WebDAVModule" />
  <remove name="Session" />
  <add name="SPRequestModule" preCondition="integratedMode" type="Microsoft.SharePoint.ApplicationRuntime.SPRequestModule, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  <add name="SharePoint14Module" preCondition="integratedMode" />
  <add name="StateServiceModule" type="Microsoft.Office.Server.Administration.StateModule, Microsoft.Office.Server, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="RSRedirectModule" type="Microsoft.ReportingServices.SharePoint.Soap.RSRedirectModule, RSSharePointSoapProxy, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
  <add name="PublishingHttpModule" type="Microsoft.SharePoint.Publishing.PublishingHttpModule, Microsoft.SharePoint.Publishing, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="CustomErrorHandler" type="com.handlers.CustomErrorHandler, Assemblyname, Version=4.5.6.7, Culture=neutral, PublicKeyToken=3450345789" />
</modules>
.

Как эта нить говорит (Confiremd MS Developer) Нет возможности контролировать порядок узлов при работе с SPWEBConfigmodification:

/social.technet.microsoft.com/forums/en-us/sharepoint2010programming/thrad/154a09de-d9fc-4622-A397-589A3C1A87E5/

Добавление записи Web.config вручную не вариант.

на самом деле нет другого пути?

Это было полезно?

Решение 2

Наконец я оказался другим подходом для моих пользовательских страниц ошибок.

Потому что невозможно контролировать порядок элементов в web.config программно (который столько отсасывает!) И редактирование вручную нет варианта, я отказался от подхода с httpmodule и Manipulation web.config.

вместо этого я написал веб-приложение Scoped Plance Receiver, как описано здесь: http://todd-carter.com /post/2010/04/07/an-expected-Error-has-occurred.aspx . Чтобы установить пользовательскую страницу ошибки для приложения (которая обрабатывает исключения). Страница настраиваемой ошибки имеет элемент управления, который отображает пользовательское сообщение для пользователя и регистрирует исключение.

Дополнительно добавил пользовательский файл 404.html в решение в папке сопоставленных макетов \ 1033 и зарегистрировал этот файл для приложения в том же ресивере функций (см. Код ниже). 404.html делает перенаправление на .aspx-файл. ASPX имеет контроль, который оказывает контент интернационализированным. Вы также можете просто установить статический HTML на 404 ошибок. Причина перенаправления была интернационализация.

Одна дополнительная ловушка с файлом .html и неиправочными браузерами была для меня проблема, описанная здесь (потому что я скопировал стандарт SP 404.html для отправной точки):

http://andreasglaser.net/post/2009/03/15/sharepoint-and-custom-404-page-not-found-and-utf-8-issue-with-firefox. ASPX

код идет здесь:

private const string CustomErrorPage = "/_layouts/CustomError.aspx";

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
  SPWebApplication webApp = properties.Feature.Parent as SPWebApplication;

  if (webApp != null)
  {
    if (!webApp.UpdateMappedPage(SPWebApplication.SPCustomPage.Error, CustomErrorPage))
    {
      throw new ApplicationException("Cannot create the new error page mapping.");
    }
  }

  webApp.FileNotFoundPage = "Custom404.html";
  webApp.Update(true);
}

public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
  SPWebApplication webApp = properties.Feature.Parent as SPWebApplication;

  if (!webApp.UpdateMappedPage(SPWebApplication.SPCustomPage.Error, null))
  {
    throw new ApplicationException("Cannot reset the default error page mapping.");
  }
  webApp.FileNotFoundPage = String.Empty;
  webApp.Update(true);
}
.

Другие советы

Если это не будет работать, как ожидалось, я бы порекомендовал вам использовать xpathВместе с SPWEBModifications для определения порядка.

<Сильное> Обновление

Я только что проверил его решение вместе с решением XPath, и он не ведет себя как ожидалось.Похоже, что есть нет способа контролировать порядок записей.Спасибо за его вклад!

<Сильное> Обновление 2

Не могли бы вы попробовать использовать HttpApplication вместо HttpContext, потому что HttpApplication определяет методы, свойства и события, общие для всех объектов приложений в приложении ASP.NET. Подробнее / P >.

Использование

 HttpContext context = ((HttpApplication)sender).Context;
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top