2010-03-31 19 views
11

Cuando quiero acceder a una web, generalmente tengo que hacer un código como el siguiente, que es bastante auto explicativo.Abrir un SPWeb desde una sola Url

using (SPSite site = new SPSite(siteUrl)) 
      { 
       SPWeb web = null; 

       if (string.IsNullOrEmpty(webName)) 
        web = site.RootWeb; 
       else 
        web = site.AllWebs[webName]; 
       ... 
       web.Close(); 
      } 

se proporciona una URL que apunta directamente a una web:

Así que en este caso sería siteUrl: http://localhost/sites/testsite

y webname sería: testweb

me gustaría conseguir simplemente un solo bit de información del usuario que se opone a estos dos bits separados, es decir, la url directamente a la web: http://localhost/sites/testsite/testweb/

Me gustaría utilizar esta url para abrir la web y no tener que especificar el nombre web manualmente. He jugado con site.OpenWeb e intenté pasar la URL a esto también, pero no me gusta. Solo quiere una URL relativa al servidor. ¿Existe alguna manera de que el usuario pueda obtener una url única para abrir la web, salvo extraer la url y suponer que el último bit puede ser o no el nombre de la web, dependiendo de si vamos a la web raíz o no, pero eso empeora el código.

Respuesta

35

No necesita dividir la URL de SPWeb absoluta para acceder al SPWeb. Simplemente puede hacer lo siguiente.

using (SPSite site = new SPSite(<url to spweb>)) 
{ 
     using(SPWeb web = site.OpenWeb()) 
     { 
     // put your code here ... 
     } 
} 
+0

Qué cosa tan estúpida para que yo no sé.Lo dice ahí mismo en la documentación. Tenía en mente que el constructor predeterminado abría la web raíz. Debe haber sido información errónea en algún momento. Bien, gracias por aclararme esto. –

+0

No, problema. De nada. – Flo

+1

@Flo, excelente, nunca me di cuenta de que esto existía específicamente para abrir el SPWeb asociado con la URL del constructor de SPSite. Aclamaciones. –

0

De acuerdo con Flo, pero hay un detalle especial que necesita para llamar la atención.

Si utiliza el contructor SPSite sin params, significa que creará una instancia con la zona url predeterminada. Hay 5 zonas url sharepoint, como: 1. Predeterminado, 2. Intranet, 3. Internet, 4. Personalizado, 5. Extranet.

Una zona asocia una URL de solicitud entrante con una URL saliente. Se puede especificar cualquier cantidad de URL de solicitud entrantes por zona, pero solo se puede especificar una URL saliente por zona. Siempre debe haber una URL saliente asociada con la zona predeterminada.

  1. SPSite (GUID)
  2. SPSite (String)
  3. SPSite (Guid, SPUrlZone)
  4. SPSite (Guid, SPUserToken)
  5. SPSite (String, SPUserToken)
  6. SPSite (Guid , SPUrlZone, SPUserToken)

Y también puede crear la instancia con un token de usuario, y luego el sitio ins de acuerdo con el permiso del usuario (como el usuario inicia sesión en el sitio). En una palabra, el permiso será diferente con el constructor SPSite diferente, por lo que debe tener cuidado de usarlo.

Para obtener más información pelease visite la siguiente URL:

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsite.spsite.aspx

1

Se puede poner el código como belows:

using (SPSite site = new SPSite(HttpContext.Current.Request.Url.ToString())) 
{ 
using (SPWeb web = site.OpenWeb()) 
{ 
// TODO:..... 
} 
} 
Cuestiones relacionadas