【发布时间】:2014-03-11 19:01:34
【问题描述】:
我有一个 MVC 4 网站 (.NET 4.5),如果他们试图访问网站的高分辨率照片 (Hrp) 部分,我想将用户重定向到一个非常简单的登录页面。我已经设置了路由,它们似乎工作正常,即用户被路由到“索引”页面或“登录”页面。但是,当我在 HrpController 的“登录”方法中收到数据时,用户名和密码字段为空,即使我在表单上填写了它们。
应用程序的逻辑流程应该如下:
- 用户转到索引页面 (/Hrp),如果用户未登录,他们将获得登录表单
- 用户填写登录表单并提交给HrpController.Login (/Hrp/Login)
- HrpController.Login 方法应该获取用户名和密码,并根据硬编码值进行验证(我知道这是非常弱的安全性,但它是对现有代码的重写,我无权更改机制)
- 如果用户名和密码与表单中输入的内容匹配,用户将获得 Hrp 索引页面 (/Hrp)
- 如果用户名或密码不匹配,则将用户返回登录页面 (/Hrp/Login)
我不确定为什么用户名和密码值为空,而不是包含用户在表单上填写的值。非常感谢任何帮助。
路线:
routes.MapRoute(
name: "Hrp",
url: "Hrp/",
defaults: new { controller = "Hrp", action = "Index" }
);
routes.MapRoute(
name: "HrpLogin",
url: "Hrp/Login/",
defaults: new { controller = "Hrp", action = "Login" }
);
routes.MapRoute(
name: "HrpDetails",
url: "Hrp/Details/{id}/",
defaults: new { controller = "Hrp", action = "Details",
id = UrlParameter.Optional }
);
形式:
@using MyApp.App_Code;
@model MyApp.App_Code.Models.HrpUser
@using (Html.BeginForm("Login", "Hrp", FormMethod.Post))
{
@Html.ValidationSummary(true, "Login failed. Check your login details.");
<div>
<div id="content" class="content">
<section id="article">
<div class="cont orangeTopBorder">
<fieldset>
<legend>Login</legend>
<div class="editor-label">
@Html.LabelFor(u => u.username)
</div>
<div class="editor-field">
@Html.TextBoxFor(u => u.username)
@Html.ValidationMessageFor(u => u.username)
</div>
<div class="editor-label">
@Html.LabelFor(u => u.password)
</div>
<div class="editor-field">
@Html.PasswordFor(u => u.password)
@Html.ValidationMessageFor(u => u.password)
</div>
<input type="submit" value="Submit"/>
</fieldset>
<div class="footerarticle">
</div>
</div>
</section>
</div>
</div>
}
控制器:
public ActionResult Login(string username, string password)
{
if (username == "yourname" && password == "yourpassword")
{
SetHrpLogonAccepted();
// Load Hrp object here, then show the main Hrp page
return RedirectToAction("Index", hrp);
}
else
{
return View("Login");
}
}
public ActionResult Index()
{
if (IsHrpLogonAccepted() == false)
{
return View("Login");
}
else
{
// Load Hrp object here, then show the main Hrp page
return View("Index", hrp);
}
}
Hrp用户:
public class HrpUser
{
[Required]
[Display(Name = "User name")]
public string username { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string password { get; set; }
}
辅助方法:
private bool IsHrpLogonAccepted()
{
return Session["HrpLogonAccepted"] != null;
}
private void SetHrpLogonAccepted()
{
Session["HrpLogonAccepted"] = true;
}
【问题讨论】:
标签: c# asp.net-mvc-4 asp.net-mvc-routing form-submit