C# C Win表单登录失败

C# C Win表单登录失败,c#,networkcredentials,C#,Networkcredentials,我正在尝试使用win form将文件从我的PC上载到远程服务器,但出现以下错误: 登录失败:未知用户名或错误密码。 在我的计算机上,我正在使用我的域用户和上载文件远程服务器的本地用户 我发现,我需要模拟我的用户,但我仍然不知道如何模拟NetworkCredential 这是我的代码: if (tbUsername.Text != string.Empty && tbPassword.Text != string.Empty && userSelectedFileP

我正在尝试使用win form将文件从我的PC上载到远程服务器,但出现以下错误: 登录失败:未知用户名或错误密码。 在我的计算机上,我正在使用我的域用户和上载文件远程服务器的本地用户

我发现,我需要模拟我的用户,但我仍然不知道如何模拟NetworkCredential

这是我的代码:

if (tbUsername.Text != string.Empty && tbPassword.Text != string.Empty && userSelectedFilePath != string.Empty)
{
    try
    {
        using (WindowsIdentity.GetCurrent().Impersonate())
        {
            WebClient client = new WebClient();

            NetworkCredential nc = new NetworkCredential("\\\\" + targetServer.Host + "\\" + tbUsername.ToString(), tbPassword.ToString());

            client.Credentials = nc;
            client.UploadFile(targetServer, filepath);
            MessageBox.Show("the file was successfully uploaded", "information", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}
else
{
    MessageBox.Show("One of the fields is empty", "Fields Empty", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
执行以下步骤:

打开“控制面板”

选择“管理工具”

打开“本地安全策略”

在左侧窗格中,导航到“安全设置”=>“本地策略”=>“安全选项”

在右侧窗格中找到“网络访问:本地帐户的共享和安全模型”

双击它以进行更改


将其设置为“经典-本地用户以自己身份进行身份验证”

我已经重写了我的代码部分,现在可以正常工作了。 现在看起来是这样的:

                    IntPtr admin_token = default(IntPtr);
                    WindowsIdentity wid_current = WindowsIdentity.GetCurrent();
                    WindowsIdentity wid_admin = null;
                    WindowsImpersonationContext wic = null;

                    if ((LogonUser(tbUsername.Text, targetServer.Host, tbPassword.Text, 9, 0, ref admin_token)) != 0 || (LogonUser(tbUsername2.Text, targetServer.Host, tbPassword2.Text, 9, 0, ref admin_token)) != 0)
                    {
                        wid_admin = new WindowsIdentity(admin_token);
                        wic = wid_admin.Impersonate();
                    }

为什么要使用网络凭据进行模拟?这会相互抵消。使用一个或另一个-两者都使用没有意义!您是否阅读了NetworkCredential的文档?您给它用户名和密码,而不是控件的类型。您有tbUsername.ToString-这是不正确的。应该是tbUsername.Text…与tbpassword相同您是对的,我错过了这一行,但它仍然不起作用。此设置已设置为“经典-本地用户以自己身份进行身份验证”。