2010-03-17 122 views
4

問題:在SPSite或SPWeb對象的URL中使用具有不正確大小寫的SharePoint API(對象模型)創建網站列會導致新列如果試圖通過「網站欄庫」進行編輯,則會拋出異常。如何確定SharePoint網站的正確(區分大小寫)URL

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) 

如何可靠地獲取站點/網站的正確URL? SPSite.Url和SPWeb.Url屬性似乎返回它們實例化的任何情況。

換句話說,該網站集使用以下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 
    } 
} 
+0

你在哪裏運行創建站點列的代碼?通過功能接收器? – UnhipGlint 2010-03-17 23:59:43

+0

@UnhipGlint我目前只是在服務器上的控制檯應用程序中運行它。最終它可能會在特性接收器中結束,或者可能會根據需要調用服務器控件/ .ashx。 – Goyuix 2010-03-18 03:06:55

回答

1

不知道這是否是影響你,但是相對於一個已知的bug,以區分在SharePoint中的URL靈敏度。

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

既然你是在三月發佈此,你可能有安裝修補程序服務包。您可能會錯過註冊表設置。

+0

這是很好的知道,但不幸的是似乎並沒有解決網站專欄的具體情況。 – Goyuix 2010-05-13 22:13:14