用户使用他们的电子邮件地址登录到我们创建的 SharePoint 网站,这将成为他们的用户名。但是,这会为 MySites 带来问题。
当用户创建 MySite 时,URL 会删除用户名中 @ 符号后的任何内容,因此如果用户的电子邮件地址是 user1@test.com,则其 MySite 的 URL 将变为:
http://host/personal/user1/
但是,如果他们是具有相同电子邮件前缀但具有不同域(即 user1@anotherdomain.com)的另一个用户,则会导致问题。此用户的 MySite URL 也需要是
http://host/personal/user1/
当用户注册网站时,我们使用以下代码创建他们的个人资料和 MySite:
if (!profileManager.UserExists(username))
{
UserProfile profile = profileManager.CreateUserProfile(username);
profile["PreferredName"].Value = fullname!=null?fullname:username;
profile["WorkEmail"].Value = email != null ? email : "";
profile["PersonalSpace"].Value = email;
profile.Commit();
#region create User My Site
using (SPSite site = profile.PersonalSite)
{
if (site == null)
{
try
{
profile.CreatePersonalSite();
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(string.Format("CreateMySite - {0}", ex.Message));
throw ex;
}
}
}
#endregion
}
HttpContext.Current = httpCxt;
我可以在这里做些什么来控制所使用的 URL 吗?
-- 编辑
上述行为是 MOSS 的默认行为。 IE。我没有手动获取用户的电子邮件地址,这是 MOSS 自动执行的操作。如果我可以说 URL 应该是:
http://host/personal/user1-at-test-dot-com
我试过转义电子邮件地址并将其分配给个人空间值,如下所示:
string clean = email.Replace("@","-at-");
profile["PersonalSpace"].Value= clean;
....
但这并没有帮助。
最佳答案
这是一种不常见的做法,是否有任何特定原因是根据电子邮件而不是用户名创建用户的?不管怎样,这里有一些想法。
- 使用正常的命名冲突解决方案,在 url user_domain 中包含域,
- 如果发生冲突,创建一个唯一的 Id user_1,user_2,并检查下划线后面的数字以生成下一个。
编辑
根据您的编辑,您可以在 moss 本身中配置冲突解决方案,这就是为什么我说这是一种奇怪的创建 url 的方式,
在您的 SSP 中,转到“我的网站设置”,查看网站命名格式组
您的选择:
用户名(不解决冲突) 示例:http://portal_site/location/username/
用户名(使用domain_username解决冲突) 示例:.../用户名/或 .../domain_username/
域名和用户名(不会有冲突) 示例:http://portal_site/location/domain_username/
关于c# - SharePoint MySites URL 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1866697/