使用 Project Online 和 CSOM 进行身份验证时出现错误 401
Error 401 authenticating with Project Online and CSOM
尝试在控制台应用程序中使用 CSOM 连接到 Project Online 时出现错误 401(或 403)。 (这不是内部部署。它是 Microsoft Project Online 2013。)这是代码。
ProjectContext projContext = new ProjectContext(pwaPath);
projContext.Credentials = new NetworkCredential("myUserID", "mypwd", "xxx.onmicrosoft.com");
projContext.ExecutingWebRequest += new EventHandler<WebRequestEventArgs>(projContext_ExecutingWebRequest);
projContext.Load(projContext.Projects);
projContext.ExecuteQuery();
**// Error 401 Unauthorized**
static void projContext_ExecutingWebRequest(object sender, WebRequestEventArgs e)
{
e.WebRequestExecutor.WebRequest.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
}
再试一次,不执行 ExecutingWebRequest:
ProjectContext projContext = new ProjectContext(pwaPath);
projContext.Credentials = new NetworkCredential("myUserID", "mypwd", "xxx.onmicrosoft.com");
projContext.Load(projContext.Projects);
projContext.ExecuteQuery();
**// Error 403 Forbidden**
Q1:代码有没有问题?
问题 2:Project Online 中是否有我缺少的设置?
您可以使用:
new SharePointOnlineCredentials(username, secpassword);
而不是
new NetworkCredential("admin@myserver.onmicrosoft.com", "password");
首先:安装所需的客户端SDK
- SharePoint 客户端 SDK:
http://www.microsoft.com/en-au/download/details.aspx?id=35585
- 项目 2013 SDK:
http://www.microsoft.com/en-au/download/details.aspx?id=30435
其次:添加对您的项目的引用
- Microsoft.SharePoint.Client.dll
- Microsoft.SharePoint.Client.Runtime.dll
- Microsoft.ProjectServer.Client.dll
您可以在 %programfiles%\Common Files\microsoft shared\Web Server Extensions\ISAPI
中找到 dll
和 %programfiles(x86)%\Microsoft SDKs\Project 2013\REDIST
示例代码如下:
using System;
using System.Security;
using Microsoft.ProjectServer.Client;
using Microsoft.SharePoint.Client;
public class Program
{
private const string pwaPath = "https://[yoursitehere].sharepoint.com/sites/pwa";
private const string username ="[username]";
private const string password = "[password]";
static void Main(string[] args)
{
SecureString secpassword = new SecureString();
foreach (char c in password.ToCharArray()) secpassword.AppendChar(c);
ProjectContext pc = new ProjectContext(pwaPath);
pc.Credentials = new SharePointOnlineCredentials(username, secpassword);
//now you can query
pc.Load(pc.Projects);
pc.ExecuteQuery();
foreach(var p in pc.Projects)
{
Console.WriteLine(p.Name);
}
//Or Create a new project
ProjectCreationInformation newProj = new ProjectCreationInformation() {
Id = Guid.NewGuid(),
Name = "[your project name]",
Start = DateTime.Today.Date
};
PublishedProject newPublishedProj = pc.Projects.Add(newProj);
QueueJob qJob = pc.Projects.Update();
JobState jobState = pc.WaitForQueue(qJob,/*timeout for wait*/ 10);
}
}
我已经在其他问题中回答了这个问题
尝试在控制台应用程序中使用 CSOM 连接到 Project Online 时出现错误 401(或 403)。 (这不是内部部署。它是 Microsoft Project Online 2013。)这是代码。
ProjectContext projContext = new ProjectContext(pwaPath);
projContext.Credentials = new NetworkCredential("myUserID", "mypwd", "xxx.onmicrosoft.com");
projContext.ExecutingWebRequest += new EventHandler<WebRequestEventArgs>(projContext_ExecutingWebRequest);
projContext.Load(projContext.Projects);
projContext.ExecuteQuery();
**// Error 401 Unauthorized**
static void projContext_ExecutingWebRequest(object sender, WebRequestEventArgs e)
{
e.WebRequestExecutor.WebRequest.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
}
再试一次,不执行 ExecutingWebRequest:
ProjectContext projContext = new ProjectContext(pwaPath);
projContext.Credentials = new NetworkCredential("myUserID", "mypwd", "xxx.onmicrosoft.com");
projContext.Load(projContext.Projects);
projContext.ExecuteQuery();
**// Error 403 Forbidden**
Q1:代码有没有问题?
问题 2:Project Online 中是否有我缺少的设置?
您可以使用:
new SharePointOnlineCredentials(username, secpassword);
而不是
new NetworkCredential("admin@myserver.onmicrosoft.com", "password");
首先:安装所需的客户端SDK
- SharePoint 客户端 SDK: http://www.microsoft.com/en-au/download/details.aspx?id=35585
- 项目 2013 SDK: http://www.microsoft.com/en-au/download/details.aspx?id=30435
其次:添加对您的项目的引用
- Microsoft.SharePoint.Client.dll
- Microsoft.SharePoint.Client.Runtime.dll
- Microsoft.ProjectServer.Client.dll
您可以在 %programfiles%\Common Files\microsoft shared\Web Server Extensions\ISAPI
中找到 dll
和 %programfiles(x86)%\Microsoft SDKs\Project 2013\REDIST
示例代码如下:
using System;
using System.Security;
using Microsoft.ProjectServer.Client;
using Microsoft.SharePoint.Client;
public class Program
{
private const string pwaPath = "https://[yoursitehere].sharepoint.com/sites/pwa";
private const string username ="[username]";
private const string password = "[password]";
static void Main(string[] args)
{
SecureString secpassword = new SecureString();
foreach (char c in password.ToCharArray()) secpassword.AppendChar(c);
ProjectContext pc = new ProjectContext(pwaPath);
pc.Credentials = new SharePointOnlineCredentials(username, secpassword);
//now you can query
pc.Load(pc.Projects);
pc.ExecuteQuery();
foreach(var p in pc.Projects)
{
Console.WriteLine(p.Name);
}
//Or Create a new project
ProjectCreationInformation newProj = new ProjectCreationInformation() {
Id = Guid.NewGuid(),
Name = "[your project name]",
Start = DateTime.Today.Date
};
PublishedProject newPublishedProj = pc.Projects.Add(newProj);
QueueJob qJob = pc.Projects.Update();
JobState jobState = pc.WaitForQueue(qJob,/*timeout for wait*/ 10);
}
}
我已经在其他问题中回答了这个问题