要么是我的 linq 语句有问题,要么是我的 GetCollection() 有问题

本文关键字:我的 有问题 GetCollection linq 语句 | 更新日期: 2023-09-27 18:34:19

这是我的代码:这是小提琴手使用以下命令调用的函数:

http://localhost:3334/Service/Login/?json={'username':'cara','password':'password'}
public ActionResult Login(JObject JSON)
{
    var response = JsonResponse.OKResponse();
    var username = JSON["username"].ToString();
    var password = JSON["password"].ToString();
    var helper = new MemberHelper();
    //goes into here and never returns
    if (helper.ValidateUser(username, password))
    {
        MongoCollection<User> users = db.GetCollection<User>();
        var usr = users.FindAll().FirstOrDefault(u => u.UserName.Equals(username));
        response.data.Add(usr);
    }
    else
    {
        return Json(JsonResponse.ErrorResponse("Invalid username or password provided!"), JsonRequestBehavior.AllowGet);
    }
    return Json(response, JsonRequestBehavior.AllowGet);
}

以及 MemberHelper 中的 validateUser 方法:

public override bool ValidateUser(string username, string password)
{
    var hash = Encoding.ASCII.GetBytes(password);
    var provider = new SHA256CryptoServiceProvider();
    for (int i = 0; i < 1024; i++) // 1024 round SHA256 is decent
         hash = provider.ComputeHash(hash);
    var pass = Convert.ToBase64String(hash);

    MongoCollection<User> users = db.GetCollection<User>();
    //***The following statement is where the program just stops***    
    var usr = users.FindAll().FirstOrDefault(u => u.UserName.Equals(username) && u.Password.Equals(pass));
   ...
}

并获取收藏....

public MongoCollection<T> GetCollection<T>(string name = null)
{
    string collectionName = name; 
    if (collectionName == null) { 
        collectionName = typeof(T).Name; 
    }
    return Database.GetCollection<T>(collectionName); 
}

我真的不知道出了什么问题。我是linq的新手,所以我不确定我是否违反了一些黄金法则。请帮忙!如果还有什么需要补充的,请告诉我。

要么是我的 linq 语句有问题,要么是我的 GetCollection<T>() 有问题

您也可以将其更改为类似

var usr = users.AsQueryable().Where(u => u.UserName.Equals(username)).FirstOrDefault();

问题确实出在方法 GetCollection<>() 中,一旦我用以下代码替换它,它就可以正常工作:

public MongoCollection<T> GetCollection<T>(string name = null)
        {
            string collectionName = name;
            if (collectionName == null)
                collectionName = typeof(T).Name;
            if (Database.CollectionExists(collectionName) == false)
                Database.CreateCollection(collectionName);
            return Database.GetCollection<T>(collectionName);
        }