有没有办法获取Share Point应用程序托管在当前服务器的根URL?例如,如果我想从我正在键入的网站加载信息:
SPSite site = new SPSite(http://dev3);
但是当我将开发代码移到生产服务器上时,我必须用新的服务器URL手动替换站点URL:
SPSite site = new SPSite(http://sp2010);
我在Visual Studio 2010中使用C#。
答案 0 :(得分:6)
我不确定我是否正确理解了您的情境,但您应该可以使用SPContext
property。
SPContext.Current.Site.Url;
答案 1 :(得分:4)
如果你想获得当前机器的主机名,就是这样:
System.Net.Dns.GetHostName()
如果您正在使用SharePoint对象模型查找内容,请尝试以下操作:
new SPSite(SPServer.Local.Address.ToString())
答案 2 :(得分:2)
所以您面临的问题是代码必须适应不同环境中的不同网址?
有两种方法可以处理这个
通过在IIS中使用主机标头确保所有环境中的Url都相同这将导致DEV机器和PROD机器中的URL相同。 (在DEV机器上,您还需要在注册表中设置BackConnectionHostNames以使其正常工作,因为您将登录DEV框并从那里本地工作)。 [1] http://www.it-notebook.org/iis/article/understanding_host_headers.htm [2] http://support.microsoft.com/kb/896861
但是,解决这个问题的一种更标准(和现实)的方法是将根网站名称保存在配置文件中,然后让代码从那里获取它。对于不同的环境,您只需要更新配置文件即可。您也可以通过设置安装程序来根据安装环境替换字符串来自动执行此操作。你得到的好处是你没有对Url进行硬编码,并且逻辑不依赖于服务器的主机名(肯定会出现使用主机头的情况,或者导致URL的备用访问映射)与服务器的主机名不同)。因此,这样可以更好地解耦。
只是我的两分钱。
答案 3 :(得分:1)
对我来说,这些提示没有成功。我有几个网站集,而不是使用DNS信息,我发现获取Web应用程序的最顶层网站集的URL更安全,如下所示:
[current SPWeb].Site.WebApplication.AlternateUrls[0].IncomingUrl
或(更长并导致带有尾部斜杠的网址):
[current SPWeb].Site.WebApplication.AlternateUrls[0].Uri.AbsoluteUri
答案 4 :(得分:0)
如果您想在计算机上获取所有Web应用程序,您可以获得此集合:
Microsoft.SharePoint.Administration.SPWebService.ContentService.WebApplications
为了更好地衡量,以下是获取管理Web应用程序的方法:
Microsoft.SharePoint.Administration.SPWebService.AdministrationService.WebApplications
通过使用这些方法,您可以在很大程度上将网站集网址硬编码到您的代码库中。
答案 5 :(得分:0)
小心!
虽然WebApplication.Sites集合中的第一项通常是根网站集,但如果您在创建其他网站集后碰巧删除并重新创建根网站集,则不能保证它是项目零[0]。更可靠的方法是使用这样的根URL引用网站集。
WebApplication.Sites["/"]
此外,SharePoint计时器作业在Web应用程序的上下文中执行。所以,对于计时器工作:
using (SPSite site = this.WebApplication.Sites["/"])
{
}
答案 6 :(得分:-1)
这将带您进入您所在的任何站点或子站点的主页。而不是根站点主页。
SPContext.Current.Web.Url;