在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(); }}
这对我来说似乎行得通。