我正在尝试在 SharePoint 网站上设置一些友好的 URL。我知道我可以使用 RewritePath 执行 ASP.Net 2.0 友好 URL,但我想知道是否可以使用 ASP.NET 3.5 SP1 附带的 System.Web.Routing。
我想我已经想出了如何加载我的路由表,但我不清楚使用什么方法来让正确的 IHttpHandler 传递出去。
谢谢!
我正在尝试在 SharePoint 网站上设置一些友好的 URL。我知道我可以使用 RewritePath 执行 ASP.Net 2.0 友好 URL,但我想知道是否可以使用 ASP.NET 3.5 SP1 附带的 System.Web.Routing。
我想我已经想出了如何加载我的路由表,但我不清楚使用什么方法来让正确的 IHttpHandler 传递出去。
谢谢!
我被要求将其视为 Share Point 评估过程的一部分。
我的理解是uri 模板本质上是主机名,后跟递归文件夹结构。
Share Point 将 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 方法。
它应该像下面这样简单。
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"/>
我最终接受了 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();
}}
这对我来说似乎没问题。