如何确定SharePoint站点的正确(区分大小写)URL

时间:2010-03-17 00:03:54

标签: sharepoint moss wss

问题:使用SharePoint API(对象模型)在SPSite或SPWeb对象的URL中使用不正确的大小写创建站点列将导致新列在尝试编辑时抛出异常它是通过Site Columns Gallery制作的。

SharePoint通常非常容忍以不区分大小写的方式接受URL,但是在某些情况下,它会完全崩溃。例如,在创建站点列时,它会在创建时以某种方式存储和使用URL,并且当尝试通过站点列库(LAYOUTS中的fldedit.aspx页面)编辑字段定义时,最终会抛出以下错误。

Value does not fall within the expected range.
at Microsoft.SharePoint.SPFieldCollection.GetFieldByInternalName(String strName, Boolean bThrowException)
at Microsoft.SharePoint.SPFieldCollection.GetFieldByInternalName(String strName) 
at Microsoft.SharePoint.ApplicationPages.BasicFieldEditPage.OnLoad(EventArgs e) 
at System.Web.UI.Control.LoadRecursive() 
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 

如何可靠地获取网站/网站的正确网址? SPSite.Url和SPWeb.Url属性似乎返回它们实例化的任何情况。

换句话说,使用以下网址设置网站集:http://server/Path/Site

然后,如果我使用SharePoint对象模型创建新的站点列,并且在实例化SPSite和SPWeb对象时碰巧使用http://server/path/site,则站点列将可用,但在尝试通过库访问它时生成上面的错误。如果我更正地址栏中的URL,我仍然可以查看/修改相关SPField的定义,但生成的默认URL是伪造的。

清除泥土?

示例代码:(由于区分大小写问题,这是一个不好的示例)

// note: site should be partially caps: http://server/Path/Site
using (SPSite site = new SPSite("http://server/path/site")) {
  using (SPWeb web = site.OpenWeb()) {
    web.Fields.AddFieldAsXml("..."); // correct XML really here
  }
}

1 个答案:

答案 0 :(得分:1)

不确定这是否会影响您,但SharePoint网址中的案例敏感性存在已知错误。

http://blogs.msdn.com/enterprisesearch/archive/2008/01/25/crawling-case-sensitive-web-content-in-sharepoint-server-2007-and-search-server-2008.aspx

由于您在三月份发布此内容,因此您可能已安装了安装了此修补程序的Service Pack。但是,您可能会错过注册表设置。