gpt4 book ai didi

c# - 类型为 'System.NullReferenceException' 的第一次机会异常发生在 Unknown Module-mvc custom authentication

转载 作者:太空宇宙 更新时间:2023-11-03 15:32:04 25 4
gpt4 key购买 nike

我一直在搜索并尝试解决我现在遇到的问题。我有一个用户模型,我想使用自定义身份验证来验证用户。提交表单时我没有看到任何错误。但是我可以在输出窗口中看到异常。这是我的模型类:

public  class UserInfo
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }

[Required(ErrorMessage="User Name is required")]
[Display(Name="User Name")]
[MaxLength(20, ErrorMessage = "The Maximum length allowed is 20 characters")]
[MinLength(4, ErrorMessage = "The Minimum length is 3 characters")]
public string Name { get; set; }

[Required(ErrorMessage = "Email is required")]
[EmailAddress(ErrorMessage = "Enter a proper email address")]
[MaxLength(30, ErrorMessage = "Maximum length allowed for an email is 30 characters")]
public string Email { get; set; }

[Required(ErrorMessage = "Password is required")]
[Display(Name = "Password")]
[DataType(DataType.Password)]
public string Pass { get; set; }

[Required(ErrorMessage = "Confirm your password")]
[Display(Name = "Confirm Password")]
[Compare("Pass", ErrorMessage = "Passwords should match")]
[DataType(DataType.Password)]
[NotMapped]
public string Confirm { get; set; }
}

这是我在 Controller 中登录的操作方法:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(UserInfo user)
{
if (ModelState.IsValid)
{

string EncryptPass;
EncryptPass = Crypto.SHA256(user.Pass);
Console.WriteLine(EncryptPass);
var i = db.Database.ExecuteSqlCommand("select count(*)
from userinfos where username = {0}", user.Name);
if (i > 0)
{
var j = db.Database.ExecuteSqlCommand("select
count(*) from userinfos where pass = {0}", EncryptPass);
if (j > 0)
{
Session["User"] = user.Name;
FormsAuthentication.SetAuthCookie(user.Name,
false);
RedirectToAction("Create", "Ministry");
}
else
{
RedirectToAction("Login");
ModelState.AddModelError(user.Pass, "Password is
incorrect");

}
}
else
{
RedirectToAction("Login");
ModelState.AddModelError(user.Name, "Our records
shows
that no account exists on your name");
}

}
return View();
}

我的观点是:

@model ChurchWebsite.Models.UserInfo

@{
ViewBag.Title = "Login";
Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Login</h2>

@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)

<fieldset>
<legend></legend>

<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Pass)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Pass)
@Html.ValidationMessageFor(model => model.Pass)
</div>


<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}



@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}

最佳答案

感谢@Stephen 一直以来对我的帮助。我创建了一个具有用户名和密码属性的模型

 public  class User
{
[Required(ErrorMessage = "User Name is required")]
[Display(Name = "User Name")]
[MaxLength(20, ErrorMessage = "The Maximum length allowed is 20
characters")]
[MinLength(4, ErrorMessage = "The Minimum length is 3 characters")]
public string Name { get; set; }

[Required(ErrorMessage = "Password is required")]
[Display(Name = "Password")]
[DataType(DataType.Password)]
public string Pass { get; set; }
}

我已经为“用户”模型添加了 Controller

public ActionResult Login()
{
return View();
}

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(User l,string ReturnUrl="")
{

string EncodedPass;
EncodedPass = Crypto.SHA256(l.Pass);

var user = db.UserInfo.Where(a => a.Name.Equals(l.Name) &&
a.Pass.Equals(EncodedPass)).FirstOrDefault();
if (user != null)
{
FormsAuthentication.SetAuthCookie(l.Name, false);
if (Url.IsLocalUrl(ReturnUrl))
{
return Redirect(ReturnUrl);
}
else
{
return RedirectToAction("Create", "Ministry");
}
}

ModelState.Remove("Password");
return View();

}

我已经为上面的操作方法添加了 View ,现在它运行良好

关于c# - 类型为 'System.NullReferenceException' 的第一次机会异常发生在 Unknown Module-mvc custom authentication,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33488722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com