【问题标题】:Whose My Site am I on? (Programmatically)我在谁的网站上? (以编程方式)
【发布时间】:2011-10-12 04:52:35
【问题描述】:

我正在构建一个 Web 部件以放在 Sharepoint 我的网站上。我需要获取 Web 部件所在的我的网站的 SPUser。目前我只是使用

Request.QueryString["accountname"]

但这不适用于我自己的“我的网站”,我也不确定它是否会一直有效。

【问题讨论】:

    标签: c# .net sharepoint mysite


    【解决方案1】:

    Request.QueryString["accountname"] 为空时,用户应该在自己的mysite 上,因此您可以查看SPContext.Current.Web.CurrentUser 以获取用户。

    【讨论】:

    • 是的,但不要忘记 CurrentUser 属性返回当前登录的用户,而不是您所在的 MySite 的用户。我想从查询字符串中获取帐户名将是您唯一的选择
    • 正如 Nacht 在他的帖子中所写,当您在自己的 MySite 上时,没有帐户名查询字符串,因此您需要在代码中考虑这两种情况:在其他人 MySite 上时使用查询字符串,而在打开时当前用户 MySite 查询字符串为空,因此在 SPContext 中查找已登录用户。
    • 使用网络请求似乎是一种黑客行为,但如果这是我唯一的选择,那也是我唯一的选择。谢谢!
    【解决方案2】:

    这是使用 UserProfile (Microsoft.Office.Server.UserProfiles) 的另一种方法

    var profileLoader =   Microsoft.SharePoint.Portal.WebControls.ProfilePropertyLoader.FindLoader(HttpContext.Current.Handler as Page);
    var userProfile = profileLoader.ProfileLoaded;
    
    var loginName = userProfile["AccountName"];
    

    然后从 SPContext.Current.Web 获取您的 SPUser;

    【讨论】:

    • hmm....有趣...这保证每次都有效吗?看起来它可能只适用于我的网站的主页
    【解决方案3】:

    另一种可能的方法是使用SPSiteOwner 属性。这将为您提供一个通常更可取的SPUser 对象。此属性与可以在 Central Admin 中的“更改网站集管理员”下配置的“网站所有者”属性相关。但是请注意,由于可以对其进行配置,因此不能将其视为了解您在我的网站上的绝对来源。

    【讨论】:

    • 当用户可以访问子网站但没有个人站点根目录时,这也可能引发 403 Forbidden,例如在博客中。
    猜你喜欢
    • 2011-03-08
    • 2013-12-01
    • 1970-01-01
    • 2017-07-09
    • 2021-09-30
    相关资源
    最近更新 更多