【发布时间】:2020-07-22 15:25:09
【问题描述】:
我正在尝试在我的 Unity 应用程序中使用 C# 连接到 SharePoint Online(而不是本地 SharePoint)的基础知识。下面是我用作起点的代码(稍后将涉及更多处理/安全性)。令人兴奋的是,如果我运行 Fiddler(一个网络活动窥探工具)或者如果我在 Unity 之外编译它,那么这段代码就可以工作。如果没有 Fiddler(在 Unity 中),我会收到错误消息:SocketException: No connection could be made because the target machine actively refused it. Fiddler 可能会做些什么来完成这项工作,有没有办法可以在我的代码中复制它?
public void SharepointLogin()
{
//string url = "https://<private_server>/sites/sitename";
string url = "https://<company>.sharepoint.com/sites/otherSiteName";
//string folderpath = "/sites/sitename/folder/";
string folderpath = "/sites/otherSiteName/folder/";
string filepath = "W:/ServerData.csv";
using (var ctx = new ClientContext(url))
{
ctx.AuthenticationMode = ClientAuthenticationMode.Default;
SecureString ss = new NetworkCredential("", password).SecurePassword;
//ctx.Credentials = new System.Net.NetworkCredential(username, password);
ctx.Credentials = new SharePointOnlineCredentials(usernameWithDomain, ss);
var filename = Path.GetFileName(filepath);
using (FileStream fs = new FileStream(filepath, FileMode.Open))
{
Microsoft.SharePoint.Client.File.SaveBinaryDirect(ctx, folderpath + filename, fs, true);
}
}
}
其他信息:
半相关但可能很有见地,Unity 在连接到“本地”SharePoint 网站时似乎无法使用CredentialCache.DefaultNetworkCredentials(实际上似乎根本不包括它),这迫使我重新创建它们System.Net.NetworkCredentials 代替。 (请参阅确实适用于其他站点的注释行)。如果我在 Unity 之外构建相同的代码,它也可以正常工作,很明显 Unity 出于某种原因正在剥离它。 Unity 的代理似乎也存在一般问题,但由于我可以使用本地服务器,我希望还有一种方法可以访问 SharePoint Online 服务器——尤其是因为 Fiddler 以某种方式做到了工作,因此 Unity 不能像使用 DefaultCredentials 那样简单地剥离凭据。
SharePoint Online 特别需要一个 SharePointOnlineCredentials 对象,因此我没有获得与本地部署相同的解决方法。 Fiddler 没有修复本地连接,但是,在使用 DefaultNetworkCredentials 时,就像在使用 SharePointOnlineCredentials 时一样,所以显然这是一种不同的故障机制。我也通读了https://www.telerik.com/blogs/help!-running-fiddler-fixes-my-app-,但它似乎没有提供我的答案。
【问题讨论】:
标签: c# unity3d proxy sharepoint-online fiddler