【问题标题】:Unable to check if username exists无法检查用户名是否存在
【发布时间】:2016-10-25 00:28:02
【问题描述】:

我是 Stackoverflow 的新手,我刚开始使用 .NET Core,也是我第一次使用身份。我基本上是在使用对控制器的 ajax 调用来查看用户名是否已经存在。然后我做了一些研究,发现我可以使用下面的RemoteAttribute是我的RegisterViewModel。

    public class RegisterViewModel
{
    [Required]
    [StringLength(100, ErrorMessage = "some error", MinimumLength = 2)]
    [DataType(DataType.Text)]
    [Display(Name = "Username")]
    [RegularExpression(@"(^[\w]+$)", ErrorMessage = "some error")]
    [Remote("CheckUserName", "Account", HttpMethod = "POST", ErrorMessage = "some error")]
    public string Username { get; set; }

然后在我的控制器中我有这个。

    public async Task<JsonResult> CheckUserName(string username)
    {
        var user = db.Users.Where(x => x.UserName == username).FirstOrDefault();
        if (user == null)
            return Json(true);
        else
            return Json(false);    
    }

但我的 datacontext 总是抛出 Object Reference not set to an instance of an object,所以我使用了 FindByNameAsync Identity 方法,它总是返回 null,见下文。 p>

    public async Task<JsonResult> CheckUserName(string username)
    {
        var user = await _userManager.FindByNameAsync(username);
        //but user is always null ??
    }

任何帮助将不胜感激。

【问题讨论】:

  • 也许string username 需要是string Username
  • 你是说参数username的值是null?如果是这样,请查看生成表单控件的代码。
  • @StephenMuecke No FindByNameAsync 返回的值为空,所以user
  • 那么这表明数据库中没有匹配username的记录
  • Object Reference not set to an instance of an object 你错过了这里的重点。 null 到底是什么? db 还是 db.Users?这可能只是这两个对象之一,因为如果集合为空,FirstOrDefault() 不会引发异常。它会简单地返回null,正如您从代码中所知道的那样。所以很明显你的数据库有问题,而不是你搜索用户的方式。还要注意== 将不匹配,如果你错误地有一个你没有看到的空间。

标签: c# asp.net-core asp.net-identity asp.net-core-mvc


【解决方案1】:

我不确切知道我做了什么,但它现在似乎正在工作。 我加了

    [AllowAnonymous]

属性上面的方法,那可能已经做到了。但那不存在它应该引发 401 错误。不管怎样,感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 2013-11-29
    • 1970-01-01
    相关资源
    最近更新 更多