我已经创建了自己的登录页面但是当我尝试通过单击提交按钮登录时,它会直接跳转到“catch”,它返回View()而不是重定向到Admin。我似乎无法通过谷歌搜索找到任何有关它的信息。我也尝试删除try和catch并获得此异常:“InvalidOprationException未被用户代码取消”序列不包含任何元素。
这是我的登录方法:
public class LoginController : Controller
{
public static byte[] lagHash(string innString)
{
var algoritm = System.Security.Cryptography.MD5.Create();
byte[] data, utdata;
data = System.Text.Encoding.ASCII.GetBytes(innString);
utdata = algoritm.ComputeHash(data);
return utdata;
}
public ActionResult Login()
{
return View();
}
[HttpPost]
public ActionResult Login(FormCollection innAdmin)
{
string Username = innAdmin["Username"];
try
{
byte[] passwordArray;
passwordArray = createHash(innAdmin["Password"]);
var db = new Models.DataClass1DataContext();
var Admin = (from s in db.Admins
where s.Username == Username &&
s.Password == passwordArray
select s).Single();
if (Admin.Username == innAdmin["Username"])
{
return RedirectToAction("Admin", "Admin");
}
else
{
return View();
}
}
catch (Exception wrong)
{
return View();
}
}
以下是aspx文件的代码:
<table>
<tr>
<td>Username :</td>
<td>
<input type = "text" name="Username" />
</td>
</tr>
<tr>
<td>Password :</td>
<td>
<input type = "password" name="Password" />
</td>
</tr>
<tr>
<td>
<input type = "submit" value="Log In" />
</td>
</tr>
答案 0 :(得分:1)
enter code here
您似乎需要将字节数组转换为字符串。使用正确的enconding并转换为字符串。
public static string ByteArrayToString(byte[] bytes, EncodingType encodingType)
{
System.Text.Encoding encoding=null;
switch (encodingType)
{
case EncodingType.ASCII:
encoding=new System.Text.ASCIIEncoding();
break;
case EncodingType.Unicode:
encoding=new System.Text.UnicodeEncoding();
break;
case EncodingType.UTF7:
encoding=new System.Text.UTF7Encoding();
break;
case EncodingType.UTF8:
encoding=new System.Text.UTF8Encoding();
break;
}
return encoding.GetString(bytes);
}
*编辑* 尝试以下方法:
var admin = (from s in db.Admins where s.Username == Username && s.Password == passwordArray select s).SingleOrDefault();
if (admin != null)
{
return RedirectToAction("Admin", "Admin");
}
else
{
return View();
}
*编辑2 * 这意味着您的验证失败。 试试这个:
var test = (from s in db.Admins where s.Username == Username select s).SingleOrDefault();
if (test != null)
{
var test2 = test.Password;
}
放置断点并检查测试对象。它不应该为空。 查看检索到的密码,并将其与您正在使用的散列密码进行比较。 你现在正在接近。
**编辑3 ** 那么,这意味着问题在于您的数据存储区。您用于登录的用户名不存在,因此登录永远不会成功!