在c# MVC中获取sharepoint当前用户登录名

本文关键字:用户 登录 sharepoint MVC 获取 | 更新日期: 2023-09-27 18:05:18

我有两个应用程序:

  1. Sharepoint 2013作为门户网站
  2. MVC应用

如果我想从sharepoint单点登录,我怎么能得到当前用户登录到sharepoint从我的MVC应用程序

需要的信息:

  • 使用windows身份验证登录Sharepoint
  • 流:
    1. 用户登录sharepoint web
    2. 有一个按钮打开我的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。告诉我该怎么做。

谢谢

在c# MVC中获取sharepoint当前用户登录名

我还没有测试过这个,但这可能会让你进入正确的方向。

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