1

谁能发现这段代码的问题?

看法:

@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 方法没有被调用,我很难找出原因。如果我将操作重命名为索引,它会被调用...有人可以在这里发现问题吗?

我很感激任何反馈。

问候,法比奥

编辑:这似乎是一个权限问题。即使 Login 方法包含 AllowAnonymous 属性,仍然不允许调用它。如果我先执行登录然后尝试触发操作,它会起作用。现在,我如何确保未经身份验证的用户允许此操作?尝试将路径添加到根 web.config 文件并添加 web.config 文件授权登录文件夹中的每个人。没有工作。

再次感谢您的帮助。

4

2 回答 2

0

好的,我设法通过从根 web.config 中删除授权元素来解决问题:

<authorization>
   <deny users="?"/>
</authorization>

我仍然不清楚这个设置如何与 MVC 架构发生冲突。我使用了这个,所以资源应该明确地授权给公众(不限于行动和观点)。

更奇怪的是,一种行为被允许而不是另一种行为的奇怪行为。

对于其他类型的资源,我一定会适应 MVC 方式。我希望这可以与 MVC 一起正常工作。

感谢大家花时间研究这个问题。我很感激。

我希望这对其他人有帮助。

于 2013-06-12T18:07:05.607 回答
-1

您尚未在 POST 中包含 returnUrl 参数

编辑:

您正在更改 Razor 中的输入名称。这可能会混淆 ModelBinder,因此它没有创建 LoginModel。

于 2013-06-07T14:45:29.357 回答