Asp.net mvc Can';t登录到我自己的登录页面
我已经创建了自己的登录页面,但当我试图通过单击提交按钮登录时,它会直接跳转到“catch”,返回View(),而不是重定向到Admin。通过谷歌搜索,我似乎找不到任何关于它的信息。我还尝试删除try和catch,得到了这个异常:“invalidoPractionException未被用户代码破坏”序列不包含任何元素 以下是我的登录方法:Asp.net mvc Can';t登录到我自己的登录页面,asp.net-mvc,authentication,Asp.net Mvc,Authentication,我已经创建了自己的登录页面,但当我试图通过单击提交按钮登录时,它会直接跳转到“catch”,返回View(),而不是重定向到Admin。通过谷歌搜索,我似乎找不到任何关于它的信息。我还尝试删除try和catch,得到了这个异常:“invalidoPractionException未被用户代码破坏”序列不包含任何元素 以下是我的登录方法: public class LoginController : Controller { public static byte[] lag
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>
用户名:
密码:
在此处输入代码
似乎需要将字节数组转换为字符串。使用正确的编码并转换为字符串
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**
那就意味着问题出在你的数据存储上。您用于登录的用户名不存在,因此登录永远不会成功 你说的“它什么都不会做”是什么意思?它是否没有输入您上面显示的方法?抛出异常?请提供更多细节…嗨!谢谢你的回答。“是”未输入该方法,它会直接跳到返回视图的位置。@SLaks抱歉,我已经创建了哈希文件,看起来哈希不是问题所在。您会遇到什么异常?出于安全原因,您应该对哈希进行加密。(这不会解决您的问题)我尝试了以下代码,但也没有成功。当我按下提交按钮时,它只是返回视图();嗯,真奇怪!我已经仔细检查了我的用户名和密码+几乎创建了一个新的,只是想看看我是否使用了错误的密码或用户名,但似乎两者都不是问题:S Man。。这太令人沮丧了!您是否可以手动连接到成员资格提供商并再次检查?(从VS菜单项目->ASP.NET配置)确保正确配置了实体框架。可能您同时指向的是另一个数据库。我在测试提供程序时收到一条消息:无法建立到数据库的连接。如果尚未创建SQL Server数据库,请退出网站管理工具,使用aspnet_regsql命令行实用程序创建和配置数据库,然后返回此工具以设置提供程序。你有什么想法吗?