SharePoint 2010: Como crear y desplegar un HTTP Module!

Junto con los HTTP Handlers, el uso de HTTP Modules en SharePoint 2010 es una alternativa muy interesante cuando queremos realizar ciertas acciones cuando se accede a un sitio de SharePoint sin que el usuario intervenga:

  • Mostrale un diálogo informativo.
  • Realizar una redirección en función de los permisos.
  • Recopilar información del usuario accediendo.
  • ….

Para crear un HTTP Module con las herramientas de desarrollo para SharePoint 2010 de Visual Studio 2010:

  • En Visual Studio 2010 creamos un proyecto de tipo “Empty SharePoint Project”.
  • En el asistente de configuración, indicamos como tipo de despliegue “Deploy as a farm solution”.
image image
  • Una vez creada la estructura del proyecto, añadimos una referencia a System.Web.
  • Añadimos al proyecto un elemento de tipo “Class File” que codificamos la clase de la siguiente forma:
   1: using System;

   2: using System.Collections.Generic;

   3: using System.Linq;

   4: using System.Text;

   5:  

   6: //Espacios de nombres necesarios

   7: using Microsoft.SharePoint;

   8: using System.Web;

   9:  

  10: namespace SPHttpModuleSample

  11: {

  12:     public class HttpRedirectModule: IHttpModule

  13:     {

  14:         public void Dispose()

  15:         { }

  16:         public void Init(HttpApplication httpaAppContext)

  17:         {

  18:             httpaAppContext.BeginRequest+=

  19:                 new EventHandler(httpaAppContext_BeginRequest);

  20:         }

  21:  

  22:         void httpaAppContext_BeginRequest(object sender, EventArgs e)

  23:         {

  24:             HttpApplication httpaApplication =

  25:                 (HttpApplication)sender;

  26:             string sRequestUrl = 

  27:                 httpaApplication.Request.Url.ToString();

  28:  

  29:             if (sRequestUrl.Contains("Redirection"))

  30:             {

  31:                 httpaApplication.Response.Write("http://www.ciin.es");

  32:             }

  33:         }

  34:     }

  35: }

  • Como vemos, la clase creada tiene que heredar de IHttpModule. A continuación implementamos el método Init en el que especificamos cuál va a ser el manejador para el objeto HttpApplication correspondiente asociado al HTTP Mudule.
  • En el manejador es dónde meteremos la lógica correspondiente. En mi caso, simplemente estoy escribiendo información en la respuesta devuelta por el servidor únicamente en ciertas páginas que cumplan la condición.
  • Desplegamos el HTTP Module en nuestro entorno y para que SharePoint “se entere” de que está disponible tenemos que editar el Web.Config (o modificarlo de forma programática) para añadir en la sección <modules> la referencia a nuestro HTTP Module. Como veis, se trata de añadir un <add name=”MyModulo”>.
   1: <modules runAllManagedModulesForAllRequests="true">

   2:   <remove name="AnonymousIdentification" />

   3:   <remove name="FileAuthorization" />

   4:   <remove name="Profile" />

   5:   <remove name="WebDAVModule" />

   6:   <remove name="Session" />

   7:   <add name="SPRequestModule" preCondition="integratedMode" type="Microsoft.SharePoint.ApplicationRuntime.SPRequestModule, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />

   8:   <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

   9:   <add name="SharePoint14Module" preCondition="integratedMode" />

  10:   <add name="StateServiceModule" type="Microsoft.Office.Server.Administration.StateModule, Microsoft.Office.Server, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />

  11:   <add name="PwaAuthentication" type="Microsoft.Office.Project.PWA.PwaAuthenticationModule, Microsoft.Office.Project.Server.PWA, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />

  12:   <add name="RSRedirectModule" type="Microsoft.ReportingServices.SharePoint.Soap.RSRedirectModule, RSSharePointSoapProxy, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />

  13:   <add name="PublishingHttpModule" type="Microsoft.SharePoint.Publishing.PublishingHttpModule, Microsoft.SharePoint.Publishing, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />

  14:   <add name="HttpRedirectModule" type="SPHttpModuleSample.HttpRedirectModule, SPHttpModuleSample, Version=1.0.0.0, Culture=neutral, PublicKeyToken=410ab55a4b3766be" />

  15: </modules>

  • Comprobamos que si accedemos a una página de nuestro sitio que no cumple la condición configurada en el HTTP Module no se escribe nada en la respuesta.
  • En cambio, si la página accedida cumple la condición si que escribimos en la respuesta de vuelta del servidor.
image image

Publicado por

Juan Carlos González

Juan Carlos es Ingeniero de Telecomunicaciones por la Universidad de Valladolid y Diplomado en Ciencias Empresariales por la Universidad Oberta de Catalunya (UOC). Cuenta con más de 12 años de experiencia en tecnologías y plataformas de Microsoft diversas (SQL Server, Visual Studio, .NET Framework, etc.), aunque su trabajo diario gira en torno a SharePoint & Office 365. Juan Carlos es MVP de Office Servers & Services desde 2015 (anteriormente fue reconocido por Microsoft como MVP de Office 365 y MVP de SharePoint Server desde 2008 hasta 2015), coordinador del grupo de usuarios .NET de Cantabria (Nuberos.Net, www.nuberos.es), co-fundador y coordinador del Grupo de Usuarios de SharePoint de España (SUGES, www.suges.es), así como co-director de la revista gratuita en castellano sobre SharePoint CompartiMOSS (www.compartimoss.com). Hasta la fecha, ha publicado 8 libros sobre SharePoint & Office 365 y varios artículos en castellano y en inglés sobre ambas plataformas.

2 comentarios en “SharePoint 2010: Como crear y desplegar un HTTP Module!”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *