在c# MVC中获取sharepoint当前用户登录名
本文关键字:用户 登录 sharepoint MVC 获取 | 更新日期: 2023-09-27 18:05:18
我有两个应用程序:
- Sharepoint 2013作为门户网站 MVC应用
如果我想从sharepoint单点登录,我怎么能得到当前用户登录到sharepoint从我的MVC应用程序
需要的信息:
- 使用windows身份验证登录Sharepoint
- 流:
- 用户登录sharepoint web
- 有一个按钮打开我的MVC应用程序在新的选项卡(通过URL)
目前我只知道使用REST API方法。现有代码:
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(HostURL + "/_api/Web/CurrentUser?Select=id");
request.Method = "GET";
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.UseDefaultCredentials = true;
request.PreAuthenticate = true;
request.Credentials = new NetworkCredential(UserName, Password, DomainName);
但是在我的代码中只获得我在网络凭据中分配的用户。我怎么能得到当前用户登录到sharepoint从我的MVC应用程序?
任何方法将被接受,只要我能得到用户LoginName。告诉我该怎么做。
谢谢
我还没有测试过这个,但这可能会让你进入正确的方向。
using (SPSite site = new SPSite(SPContext.Current.Site.ID)){
using (SPWeb web = site.OpenWeb(SPContext.Current.Web.ID))
{
string userName = web.CurrentUser.LoginName;
}}
希望对你有帮助。
编辑
using Microsoft.SharePoint.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MVCApp.Controllers
{
public class EmployeeController : Controller
{
[SharePointContextFilter]
public ActionResult Index()
{
User spUser = null;
var spContext = SharePointContextProvider.Current.GetSharePointContext(HttpContext);
using (var clientContext = spContext.CreateUserClientContextForSPHost())
{
if (clientContext != null)
{
spUser = clientContext.Web.CurrentUser;
clientContext.Load(spUser, user => user.Title);
clientContext.ExecuteQuery();
ViewBag.UserName = spUser.Title;
}
}
return View();
}
}
}
这在技术上是不可能的。当你的MVC应用程序不是一个ProviderHostedApp时,你无法获得登录到SharePoint门户的用户。
只有当你的应用程序是sharepoint解决方案并且在sharepoint上下文中运行时,Sarel的答案才有效。否则你只能建立一个新的SPSite或SPWeb对象与当前的使用,是的,但它是用户正在运行/使用你的MVC应用程序。
当用户在sharepoint站点上打开你的应用时,你必须确保MVC应用的IIS配置设置为Windows身份验证和用户模拟。
在这种情况下,打开SharePoint网站并点击链接打开MVC应用程序的用户是同一个用户。然后你就可以得到当前使用的HTTPContext在你的MVC应用程序。
System.Web.HttpContext.Current.User