我有MOSS服务器,用户授权将通过AD。
我想以programmaticaly方式获取一些当前的用户信息,例如电子邮件,电话号码。
我做了以下步骤: 1)使用[assembly:AllowPartiallyTrustedCallers]创建dll 2)我有继承System.Web.UI.WebControls.WebParts.WebPart的类PhoneBookCL 我尝试覆盖CreateChildControls()进行测试;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.Office.Server;
using Microsoft.Office.Server.UserProfiles;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.Portal;
public class PhoneBookCL : WebPart
{
SPUser currentUser = null;
protected override void CreateChildControls()
{
try
{
SPWeb web = SPControl.GetContextWeb(Context);
currentUser = web.CurrentUser;
}
catch (Exception exp) { value = exp.Message; }
}
}
3)为dll分配了强名称,然后将SafeControl添加到web.config:
4)dll - >到\ Bin目录,将此WebPart添加到SP webparts集合, 将webpart添加到新页面。
刷新页面转到异常:意外异常。
如果我删除
"SPWeb web = SPControl.GetContextWeb(Context);
currentUser = web.CurrentUser;"
然后一切都很棒。
我可以创建Label并更改其Text属性和其他内容。 此外,我试图从Microsoft.SharePoint.WebControls.WebPart继承,它实际上继承了UI ... WebPart,所以结果是一样的。
也许有一些安全问题?
答案 0 :(得分:2)
当您将dll部署到bin时会发生此问题。我假设你的web.config的信任级别为WSS_minimal。最小的信任将不允许访问对象模型。
因此,您有以下选择:
从最佳实践的角度来看,将dll部署到具有自定义代码访问安全性的bin将是最佳选择。但是,如果您没有安全限制,可以考虑部署到GAC以简化操作。
参考:http://msdn.microsoft.com/en-us/library/ee909485%28office.12%29.aspx
此致 法伊兹