Pergunta

Eu estou tentando configurar alguns URLs amigáveis ??em um site SharePoint. Eu sei que eu posso fazer as URLs amigáveis ??ASP.Net 2.0 usando RewritePath, mas eu queria saber se era possível fazer uso do System.Web.Routing que vem com ASP.NET 3.5 SP1.

Eu acho que eu descobri como obter minha mesa rota carregada, mas eu não sou claro sobre o método a utilizar para obter o IHttpHandler correta para passar para fora.

Obrigado!

Foi útil?

Solução

acabei tomando o que Ryan tinha:

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();  

}}

Isso parece ok trabalho para mim.

Outras dicas

Eu fui convidado a olhar para isso como parte de um processo de avaliação Share Point.

O meu entendimento é que o uri template é essencialmente nome do host seguido pela estrutura de pastas recursiva.

Isto é ainda mais complicada pela Share Point truncando o uri em 255 caracteres. Então, se você tem um particularmente profundo ou detalhado estrutura da pasta, em seguida, seus uri pode se tornar inválido.

Eu estava pensando sobre essencialmente embelezar / arrumar a uri por seguir uma convenção legível e converter para a convenção Share Point. ou seja:

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

convertidos para compartilhar Pontos:

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

Todos os serviços necessários adicionais podem ser controlados pelo controlador.

Se mais de 255 caracteres algum tipo de abordagem tinyurl seria minha sugestão inicial.

Deve ser tão fácil como o abaixo.

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

Em seguida, registrar System.Web.Routing.UrlRoutingModule sob HTTP módulos em web.config e você deve ser bom para ir.

<add name="Routing" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top