Question

Y a-t-il un moyen de mettre un gestionnaire d'erreur HTTPModule au début de la section des modules dans web.config sans le faire manuellement?

J'ai essayé l'approche complémentaire web.config comme ceci:

  <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>

Le problème est que le gestionnaire d'erreur personnalisé doit être placé avant le gestionnaire standard. Si vous ne le faites pas, SharePoint gère l'exception elle-même et fournit la page d'exception standard.

attendu:

 <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>

résultat par approche supplémentaire:

<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>

Comme ce thread indique (confirmd par MS Developer) Il n'y a aucun moyen de contrôler l'ordre des nœuds lorsque vous travaillez avec SPWebConfigModification:

http: / /social.technet.microsoft.com/forums/en-us/sharepoint2010Programmation/thread/154a09de-d9fc-4622-a397-589A3C1A87E5/

Ajouter la saisie Web.Config manuellement n'est pas une option.

n'y a-t-il vraiment pas d'autre moyen?

Était-ce utile?

La solution 2

Enfin, j'ai fini par une approche différente de mes pages d'erreur personnalisées.

Étant donné qu'il n'est pas possible de contrôler l'ordre des éléments dans web.config Programmatiquement (qui craint tellement!) Et l'édition manuellement n'est pas une option, j'ai abandonné l'approche avec une machine httpmodule et manipulant web.config.

Au lieu de cela, j'ai écrit un récepteur de fonctionnalité Scoped Application Web comme décrit ici: http://todd-carter.com /post/2010/04/07/an-expected-error-has-occurred.aspx Pour définir une page d'erreur personnalisée pour l'application (qui gère des exceptions). La page d'erreur personnalisée a un contrôle qui rend un message personnalisé pour l'utilisateur et enregistre l'exception.

En outre, j'ai ajouté un fichier personnalisé 404.html à la solution dans le dossier mappé \ 1033 et enregistré ce fichier pour l'application dans le même récepteur de fonctionnalité (voir le code ci-dessous). Le 404.html fait une redirection vers un fichier .aspx. L'ASPX a un contrôle qui rend le contenu internationalisé. Vous pouvez également définir simplement le HTML statique pour les erreurs 404. La raison de la redirection était l'internationalisation.

Un piège supplémentaire avec le fichier .html et les non-Ie-navigateurs était pour moi le problème décrit ici (parce que j'ai copié le standard SP 404.html pour un point de départ):

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

code va ici:

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);
}

Autres conseils

Si cela ne fonctionne pas comme prévu, je vous recommanderais d'utiliser XPATHavec SpwebModifications pour définir la commande.

mise à jour

Je viens de tester ma solution avec une solution XPath et cela ne se comporte pas comme prévu.Il semble qu'il y ait aucun moyen de contrôler l'ordre des entrées.Merci par pour son entrée!

mise à jour 2

Pourriez-vous essayer d'utiliser HttpApplication au lieu de HttpContext car HttpApplication définit les méthodes, les propriétés et les événements communs à tous les objets d'application dans une application ASP.NET. Voir plus

Utilisation

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top