繁体   English   中英

使用 WPF 和 XmlNode 在 C# 中使用 xml 文件验证用户名和密码

[英]Validating username and password with xml file in C# with WPF and XmlNode

我正在尝试使用 Xml 文件中保存的凭据验证用户名和密码。 但我只得到错误。 这是我在 C# 和 WPF 中的第一个项目。似乎我没有将我的变量放入 XmlNode 阅读器块中。 如何将所需的变量放入节点读取器块中,或者我的解析尝试中的错误在哪里?

namespace RAS_ERP
{

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Login_Click(object sender, RoutedEventArgs e)
    {
            string UName = TxtUsername.Text;
            string PWord = TxtPassword.Text;
        XmlDocument doc = new XmlDocument();
        doc.Load("/Resources/config.xml");
        XmlNode root = doc.DocumentElement;

        XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
        nsmgr.AddNamespace("cfg", "urn:config-schema");
        XmlNodeList nodeList = root.SelectNodes(
        "descendant::cfg:users[cfg:username = string 'UName']", nsmgr
            );
        foreach (XmlNode users in nodeList)
        { string username;
            string password;
            if (PWord == password && UName == username)
                    {
                NavigationService service = NavigationService.GetNavigationService(this);
                service.Navigate(new Uri("MainMenu.xaml", UriKind.RelativeOrAbsolute));
            } 
                } 
            else
            {
                LblError.string = "Username or Password Incorrect !";
            }
        }
    }



    private void Username_TextChanged(object sender, TextChangedEventArgs e)
    {

    }
}

以及我想用来验证登录凭据的 XML:

<?xml version="1.0" encoding="utf-8" ?>
<config xmlns="urn:config-schema">
<login>
<users>
  <username>
    admin
  </username>
  <password>
    admin
  </password>
  <firstname>
    Asim
  </firstname>
  <lastname>
    Shah
  </lastname>
  <permissions>
    2707
  </permissions>
</users>
</login>
</config>

来自 VS 2017 的错误列表:

Fehler CS0246 Der Typoder Namespacename "MainMenue" wurde nicht gefunden (möglicherweise fehlt eine using-Direktive oder ein Assemblyverweis)。 RAS-ERP C:\\Users\\ilove\\source\\repos\\RAS-ERP\\RAS-ERP\\MainWindow.xaml.cs 49 Aktiv

Fehler CS0246 Der Typoder Namespacename "MainMenue" wurde nicht gefunden (möglicherweise fehlt eine using-Direktive oder ein Assemblyverweis)。 RAS-ERP C:\\Users\\ilove\\source\\repos\\RAS-ERP\\RAS-ERP\\MainWindow.xaml.cs 49 Aktiv

Fehler CS1061 "Label" enthält keine Definition für "Text", und es wurde keine verfügbare Text-Erweiterungsmethode gefunden, die ein erstes Argument vom Typ "Label" akzeptiert (möglicherweise fehlt ehlt evero RAS-ERP C:\\Users\\ilove\\source\\repos\\RAS-ERP\\RAS-ERP\\MainWindow.xaml.cs 58 Aktiv

Fehler CS0165 Verwendung der nicht zugewiesenen lokalen 变量“用户名”。 RAS-ERP C:\\Users\\ilove\\source\\repos\\RAS-ERP\\RAS-ERP\\MainWindow.xaml.cs 51 Aktiv

Fehler CS0165 Verwendung der nicht zugewiesenen lokalen Variablen“密码”。 RAS-ERP C:\\Users\\ilove\\source\\repos\\RAS-ERP\\RAS-ERP\\MainWindow.xaml.cs 51 Aktiv

Fehler CS1513 } erwartet。 RAS-ERP C:\\Users\\ilove\\source\\repos\\RAS-ERP\\RAS-ERP\\MainWindow.xaml.cs 69 Aktiv

编辑为 MainMenu 问题通过更改为解决了:

        foreach (XmlNode users in nodeList)
        { string username;
            string password;
            if (PWord == password && UName == username)
                    {
                NavigationService service = NavigationService.GetNavigationService(this);
                service.Navigate(new Uri("MainMenu.xaml", UriKind.RelativeOrAbsolute));
            } 

任何帮助,将不胜感激。

最终通过使用 XDocument Loader 和 Xelement 找到了解决方案。 需要使用 .ToString 方法将带有 xml 结果的变量转换为字符串,但我得到了我需要的结果:

using System;
using System.Xml;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml.Linq;
using System.Xml.XmlConfiguration;




namespace RAS_ERP
{
/// <summary>
/// Interaktionslogik für MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Login_Click(object sender, RoutedEventArgs e)
    {
        var UName = TxtUsername.Text;
        var PWord = TxtPassword.Text;
        XDocument config = XDocument.Load("../Resources/config.xml");
        var query = from o in config.Root.Elements("user")
                    where (string)o.Element("username") == UName
                    select (string)o.Element("username").Value;
        var query2 = from o in config.Root.Elements("user")
                     where (string)o.Element("username") == UName
                     select o.Element("password").Value;
        var password = query2.ToString();
            if ( PWord == password )
            {
                NavigationService service = NavigationService.GetNavigationService(this);
                service.Navigate(new Uri("MainMenu.xaml", UriKind.RelativeOrAbsolute));
            }
            else
            {
                LblError.Content = "Username or Password Incorrect !";
            }
        }

    private void Username_TextChanged(object sender, TextChangedEventArgs e)
    {

    }
}


}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM