Откройте SPWeb из одного URL-адреса

Когда я хочу попасть в Интернет, мне обычно приходится делать код, похожий на следующий, который достаточно понятен себе.

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

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

Учитывая URL-адрес, который указывает прямо на веб-сайт:

Итак, в этом случае siteUrl будет: http://localhost/sites/testsite

и webName: testWeb

Я хотел бы просто получить один бит информации от пользователя, противоположного этим двум отдельным битам, то есть URL-адрес непосредственно в Интернете: http://localhost/sites/testsite/testweb/

Я хотел бы использовать этот URL-адрес, чтобы открыть веб-сайт и не указывать его вручную. Я играл с site.OpenWeb и пробовал передавать URL-адрес, но это не нравится. Он хочет только относительный URL-адрес сервера. Есть ли способ получить только один URL-адрес от пользователя, чтобы открыть веб-сайт, не дотягивая URL-адрес и делая предположения, что последний бит может или не может быть именем сети в зависимости от того, будем ли мы перейдя в корневую сеть или нет, но затем это делает код еще хуже.

Ответ 1

Вам не нужно разделять абсолютный URL-адрес SPWeb для доступа к SPWeb. Вы можете просто сделать следующее.

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

Ответ 2

Вы можете поместить код как belows:

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

Ответ 3

Согласитесь с Flo, но есть особая деталь, на которую вы должны обратить внимание.

Если вы используете SPSite contructor без параметров, это означает, что вы создадите экземпляр с областью URL-адресов по умолчанию. Существует 5 URL-адресов URL-адреса, например: 1. По умолчанию, 2. Интрасеть, 3. Интернет, 4. Пользовательский, 5. Экстранет.

Зона связывает URL-адрес входящего запроса с исходящим URL-адресом. Любое количество URL-адресов входящих запросов может быть указано для каждой зоны, но только один исходящий URL-адрес может быть указан для каждой зоны. Всегда должен быть исходящий URL-адрес, связанный с зоной по умолчанию.

  • SPSite (Guid)
  • SPSite (String)
  • SPSite (Guid, SPUrlZone)
  • SPSite (Guid, SPUserToken)
  • SPSite (String, SPUserToken)
  • SPSite (Guid, SPUrlZone, SPUserToken)

И вы также можете создать экземпляр с токеном пользователя, а затем экземпляр сайта соответствует разрешению пользователя (в качестве входа пользователя на сайт). Одним словом, разрешение будет отличаться от другого конструктора SPSite, поэтому вы должны быть осторожны с ним.

Для получения дополнительной информации посетите следующий URL:

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