byte []不包含SequenceEqual身份验证方法的定义

时间:2012-04-24 09:01:28

标签: c# linq web-services rest authentication

任何人都可以解决我遇到的一些问题。我正在尝试创建一个自制的身份验证方法,我坚持在一些领域,并希望有人可以帮助。我想问的第一件事是如何解决我在代码中评论过的问题:

    public string Authentication(string studentID, string password)
    {
        var result = students.FirstOrDefault(n => n.StudentID == studentID);
        //find the StudentID that matches the string studentID 
        if (result != null)
        //if result matches then do this
        {
            //---------------------------------------------------------------------------- 
            byte[] passwordHash = Hash(password, result.Salt);
            string HashedPassword = Convert.ToBase64String(passwordHash);
            //----------------------------------------------------------------------------
            // take the specific students salt and generate hash/salt for string password (same way student.Passowrd was created)

            System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();
            byte[] UserPassword = enc.GetBytes(HashedPassword);
            UserPassword.SequenceEqual(result.Password); // byte[] does not contain a definition for SequenceEqual?
            //check if the HashedPassword (string password) matches the stored student.Password
        }
        return result.StudentID; 
        //if string password(HashedPassword)  matches stored hash(student.Passowrd) return student list 


        //else return a message saying login failed 
    }

1 个答案:

答案 0 :(得分:3)

“不能像方法一样使用”很可能是因为你添加了括号:result.Password()如果是属性,则删除括号result.Password。添加括号使编译器尝试将其编译为方法调用,而实际上它是属性或字段。

第二个错误是您正在尝试返回students,这是一个学生列表。该方法需要string作为返回值。您的意思是return result.StudentID;吗?例外是详细说明了从List<Student>string编译演员的失败尝试。

我不能就你的问题的后半部分提出任何建议。

<强>更新

您需要在SequenceEqual上找到名为byte[]的方法。这是Linq扩展方法,因此您可能需要添加:

using System.Linq;

到文件的顶部。

尝试将字符串传递给此方法时,您可能会收到错误:SequenceEqual(result.Password);