有人能用这段代码发现问题吗?
查看:
@model Tuple<LoginModel, RegisterModel>
<h2>Index</h2>
@using (Html.BeginForm("Login", "Login", FormMethod.Post))
{
@Html.TextBoxFor(tuple => tuple.Item1.User, new { @Name = "User" })
@Html.PasswordFor(tuple => tuple.Item1.Password, new { @Name = "Password" })
<button type="submit" name="Login">Connect</button>
}
@using .... Other actions.....
Controller:
[Authorize]
public class LoginController : Controller
{
//
// GET: /Login
[AllowAnonymous]
public ActionResult Index(string returnUrl)
{
return View();
}
//
// POST: /Login
[HttpPost]
[AllowAnonymous]
public ActionResult Login(LoginModel model, string returnUrl)
{
.
.
}
Login方法没有被调用,我很难找到原因。如果我将操作重命名为Index,则会调用它... 谁能在这里发现问题?
我很感激任何反馈。
此致 法比奥
修改:这似乎是一个权限问题。即使Login方法包含AllowAnonymous属性,仍然不允许调用它。如果我首先执行登录然后尝试触发操作,它会起作用。现在,如何确保未经身份验证的用户允许此操作?尝试添加root web.config文件的路径并添加一个web.config文件,授权每个Login文件夹。没有工作。
再次感谢您的帮助。
答案 0 :(得分:0)
好的,我设法通过从root web.config中删除授权元素来解决问题:
<authorization>
<deny users="?"/>
</authorization>
我仍然不清楚这个设置如何与MVC架构冲突。我使用了这个,所以资源应该明确授权给公众(不限于行动和观点)。
奇怪的是,一个动作被允许而不是另一个动作的奇怪行为。
我肯定会适应其他类型资源的MVC方式。我希望这可以与MVC一起使用。
感谢大家花时间研究这个问题。我很感激。
我希望这有助于其他人。
答案 1 :(得分:-1)
您没有在POST中包含returnUrl参数
编辑:
您正在更改Razor中的输入名称。这可能会使ModelBinder感到困惑,因此它不会创建LoginModel。