C# 在.NET应用程序的OneDrive中保存文件
我正在C# 在.NET应用程序的OneDrive中保存文件,c#,.net,office365,onedrive,C#,.net,Office365,Onedrive,我正在C#中做一个.NET应用程序,除了其他功能外,用户还可以登录到他们的OneDrive帐户并将文件保存到他们的帐户。我从Windows桌面(.NET)引导的安装程序下载了代码,该安装程序教导注册应用程序并与用户进行身份验证,并且该部分正在按建议运行。但是,我需要知道如何将部件放入将文件保存在帐户中,即Onedrive的根文件夹中(用户将只登录到该帐户,然后在帐户中输入要保存的文件,并将其保存在根文件夹中)。我在GitHub中看到了一些示例,但都是针对Web应用程序的 更新 using Mic
C#
中做一个.NET
应用程序,除了其他功能外,用户还可以登录到他们的OneDrive
帐户并将文件保存到他们的帐户。我从Windows桌面(.NET)引导的安装程序下载了代码,该安装程序教导注册应用程序并与用户进行身份验证,并且该部分正在按建议运行。但是,我需要知道如何将部件放入将文件保存在帐户中,即Onedrive的根文件夹中(用户将只登录到该帐户,然后在帐户中输入要保存的文件,并将其保存在根文件夹中)。我在GitHub
中看到了一些示例,但都是针对Web应用程序的
更新
using Microsoft.Identity.Client;
public partial class App : Application
{
private static string ClientId = "your_client_id_here";
public static PublicClientApplication PublicClientApp = new PublicClientApplication(ClientId);
}
public partial class MainWindow : Window
{
string _graphAPIEndpoint = "https://graph.microsoft.com/v1.0/me";
string[] _scopes = new string[] { "user.read" };
public MainWindow()
{
InitializeComponent();
}
private async void CallGraphButton_Click(object sender, RoutedEventArgs e)
{
AuthenticationResult authResult = null;
try
{
if (authResult == null)
{
authResult = await App.PublicClientApp.AcquireTokenSilentAsync(_scopes, App.PublicClientApp.Users.FirstOrDefault());
}
}
catch (MsalUiRequiredException ex)
{
// A MsalUiRequiredException happened on AcquireTokenSilentAsync. This indicates you need to call AcquireTokenAsync to acquire a token
System.Diagnostics.Debug.WriteLine($"MsalUiRequiredException: {ex.Message}");
try
{
authResult = await App.PublicClientApp.AcquireTokenAsync(_scopes);
}
catch (MsalException msalex)
{
ResultText.Text = $"Error Acquiring Token:{System.Environment.NewLine}{msalex}";
}
}
catch (Exception ex)
{
ResultText.Text = $"Error Acquiring Token Silently:{System.Environment.NewLine}{ex}";
return;
}
if (authResult != null)
{
ResultText.Text = await GetHttpContentWithToken(_graphAPIEndpoint, authResult.AccessToken);
DisplayBasicTokenInfo(authResult);
this.SignOutButton.Visibility = Visibility.Visible;
}
}
}
public async Task<string> GetHttpContentWithToken(string url, string token)
{
var httpClient = new System.Net.Http.HttpClient();
System.Net.Http.HttpResponseMessage response;
try
{
var request = new System.Net.Http.HttpRequestMessage(System.Net.Http.HttpMethod.Get, url);
//Add the token in Authorization header
request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
response = await httpClient.SendAsync(request);
var content = await response.Content.ReadAsStringAsync();
return content;
}
catch (Exception ex)
{
return ex.ToString();
}
}
使用Microsoft.Identity.Client;
公共部分类应用程序:应用程序
{
private static string ClientId=“您的客户机id\u here”;
public static PublicClientApplication PublicClientApp=新PublicClientApplication(ClientId);
}
公共部分类主窗口:窗口
{
字符串_graphAPIEndpoint=”https://graph.microsoft.com/v1.0/me";
字符串[]_scopes=新字符串[]{“user.read”};
公共主窗口()
{
初始化组件();
}
私有异步void CallGraphButton_Click(对象发送方,RoutedEventArgs e)
{
AuthenticationResult authResult=null;
尝试
{
如果(authResult==null)
{
authResult=wait App.PublicClientApp.AcquireTokenSilentAsync(_scopes,App.PublicClientApp.Users.FirstOrDefault());
}
}
捕获(MsalUiRequiredException ex)
{
//AcquireTokenSilentAsync上发生MsalUiRequiredException。这表示需要调用AcquireTokenAsync来获取令牌
System.Diagnostics.Debug.WriteLine($“MsalUiRequiredException:{ex.Message}”);
尝试
{
authResult=await App.PublicClientApp.AcquireTokenAsync(_作用域);
}
捕获(MsalException-msalex)
{
ResultText.Text=$“获取令牌时出错:{System.Environment.NewLine}{msalex}”;
}
}
捕获(例外情况除外)
{
ResultText.Text=$“以静默方式获取令牌时出错:{System.Environment.NewLine}{ex}”;
返回;
}
if(authResult!=null)
{
ResultText.Text=等待GetHttpContentWithToken(_graphAPIEndpoint,authResult.AccessToken);
DisplayBasicTokenInfo(authResult);
this.signburatton.Visibility=可见性.Visibility;
}
}
}
公共异步任务GetHttpContentWithToken(字符串url,字符串令牌)
{
var httpClient=new System.Net.Http.httpClient();
System.Net.Http.HttpResponseMessage响应;
尝试
{
var request=new System.Net.Http.HttpRequestMessage(System.Net.Http.HttpMethod.Get,url);
//在授权标头中添加令牌
request.Headers.Authorization=new System.Net.Http.Headers.AuthenticationHeaderValue(“承载者”,令牌);
响应=等待httpClient.SendAsync(请求);
var content=await response.content.ReadAsStringAsync();
返回内容;
}
捕获(例外情况除外)
{
返回例如ToString();
}
}
参考:Windows桌面(.NET)引导安装程序你能分享你使用的代码吗?好的,我已经更新了