Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET应用程序的OneDrive中保存文件_C#_.net_Office365_Onedrive - Fatal编程技术网

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)引导安装程序

你能分享你使用的代码吗?好的,我已经更新了