Uso del enrutamiento ASP.Net 3.5 SP1 con SharePoint 2007
-
02-07-2019 - |
Pregunta
Estoy intentando configurar algunas URL amigables en un sitio web de SharePoint.Sé que puedo crear las URL compatibles con ASP.Net 2.0 usando RewritePath, pero me preguntaba si era posible utilizar System.Web.Routing que viene con ASP.NET 3.5 SP1.
Creo que he descubierto cómo cargar mi tabla de rutas, pero no tengo claro qué método usar para obtener el IHttpHandler correcto.
¡Gracias!
Solución
Terminé tomando lo que tenía Ryan:
var route = new Route("blah/{*path}", new MyRouteHandler());
RouteTable.Routes.Add(route);
public class MyRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
//rewrite to some know sharepoint path
HttpContext.Current.RewritePath("~/Pages/Default.aspx");
// return some HTTP handler here
return new DefaultHttpHandler();
}}
Eso parece funcionar bien para mí.
Otros consejos
Me pidieron que analizara esto como parte de un proceso de evaluación de Share Point.
Mi entendimiento es que el plantilla de uri es esencialmente el nombre del host seguido de la estructura de carpetas recursiva.
Esto se complica aún más porque Share Point trunca el uri a 255 caracteres.Entonces, si tiene una estructura de carpetas particularmente profunda o detallada, su uri puede dejar de ser válido.
Estaba pensando esencialmente en embellecer/ordenar el uri siguiendo una convención legible por humanos y convertirlo a la convención de Share Point.es decir:
http://myhostname.com/docs/human-resources/case-files/2009/reviews/ed-blackburn.docx
se convierte en puntos compartidos:
http://myhostname.com/human%20resources/case%20files/2009/reviews/ed%20blackburn.docx
Cualquier servicio adicional requerido puede ser controlado por el controlador.
Si tiene más de 255 caracteres, mi sugerencia inicial sería algún tipo de enfoque de tinyurl.
Debería ser tan fácil como el siguiente.
var route = new Route("blah/{*path}", new MyRouteHandler());
RouteTable.Routes.Add(route);
public class MyRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
// return some HTTP handler here
}
}
Luego registre System.Web.Routing.UrlRoutingModule en los módulos HTTP en web.config y estará listo para comenzar.
<add name="Routing" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>