在SharePoint 2007中使用ASP.Net 3.5 SP1路由

时间:2020-03-06 14:36:35  来源:igfitidea点击:

我正在尝试在SharePoint网站上设置一些友好的URL。我知道我可以使用RewritePath来创建ASP.Net 2.0友好的URL,但是我想知道是否有可能利用ASP.NET 3.5 SP1附带的System.Web.Routing。

我想我已经找到了如何加载路由表的方法,但是我不清楚使用哪种方法来获得正确的IHttpHandler传递出去。

谢谢!

解决方案

它应该像下面一样简单。

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

然后在web.config的HTTP模块下注册System.Web.Routing.UrlRoutingModule,我们应该一切顺利。

<add name="Routing" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

我被要求在共享点评估过程中对此进行研究。

我的理解是,uri模板本质上是主机名,后跟递归文件夹结构。

共享点将uri截断为255个字符会进一步使情况复杂化。因此,如果文件夹结构特别深或者冗长,那么uri可能会失效。

我当时在考虑通过遵循人类易读的约定并转换为共享点约定来美化/整理uri。 IE:

http://myhostname.com/docs/human-resources/case-files/2009/reviews/ed-blackburn.docx

转换为共享积分:

http://myhostname.com/human%20resources/case%20files/2009/reviews/ed%20blackburn.docx

控制器可以控制任何其他所需的服务。

如果长度超过255个字符,我最初的建议是使用某种tinyurl方法。

我最终接受了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();  

}}

这对我来说似乎行得通。