【问题标题】:Razor redirect contains unexpected behaviorsRazor 重定向包含意外行为
【发布时间】:2017-09-28 15:14:48
【问题描述】:

我有一个非常简单的登录页面。问题在于登录方法。我执行 RedirectToAction,但是,它永远不会将网页从登录页面更改为主页。

HomeController(主应用控制器)

    public ActionResult Index(string username = null, string password = null)
    {
        if (username == null || password == null)
        {
            return RedirectToAction("Index", "Auth");
        }

        this.username = username;
        this.password = password;

        return View(); //and have tried return View("Index");
    }

AuthController(获取用户名和密码)

    public ActionResult Login(string username, string password)
    {           
        return RedirectToAction("Index","Home", new { username=username,password=password});
    }

按钮按下

function Login() {
    var _get_searchdetails = '@Url.Action("Login", "Auth")';
    $.ajax({
    url: _get_searchdetails,
    data: { username: $('#username').val(), password: $('#password').val() },
    type: "POST",
    beforeSend: function () {

    },
    error: function (xhr, textStatus, error) {
        alert("Try again!");
    },
    success: function (htmldata, xhr, settings) {

    }
    });
}

【问题讨论】:

  • type: "GET", * GASP *
  • 在控制器上设置字段是行不通的,因为控制器被实例化并随每个请求处理。您发出的下一个请求 usernamepassword 将再次为空。
  • 是的,我保存了这些... Session["username"] = login.username; AND Session["password"] = login.password;不过谢谢!
  • 您还应该使用[HttpPost] 属性和[ValidateAntiForgeryToken] 来装饰Login 方法(假设您还在表单中输入了@Html.AntiForgeryToken())。
  • 感谢您的提示,我最关心的是让某些东西正常工作,因为它是一个受证书保护的内部应用程序。

标签: asp.net-mvc razor


【解决方案1】:

实际上并不清楚您要在这里做什么,因为您的操作方法代码没有意义。

但这里更好的选择是使用RedirecToAction method,通过指定控制器和操作名称及其参数,例如:

return RedirectToAction("Index","Home", new { username=username,password=password});

并且您不应该使用Get 请求将用户名和密码传递给操作方法,因为它很容易被黑客轻易侵入网络应用程序。

希望对你有帮助!

【讨论】:

  • 做了一些更新。我正在尝试做一个简单的登录页面来获取用户凭据以模拟下游。问题是,一旦执行了您提到的 RedirectToAction,它就会保留在登录视图中。
【解决方案2】:

找到我的问题。我需要这样做而不是 ajax 查询。

        @using (Html.BeginForm("Login", "Auth"))
        {
            <label for="username">Username</label>
            <input type="text" id="username" name="username"/>
            <br />
            <label for="username">Password</label>
            <input type="password" id="password" name="password"/>

            <input type="submit" value="Create" />
        }

【讨论】:

  • 如果您想保持 ajax 行为,您可以在响应中返回一个 url,并让浏览器从 javascript 重定向到该 url(类似于 location = response.url)。但一般情况下,POST 在这种情况下使用 ajax 是没有必要的。
  • 不,我真的不需要 ajax。我只是不知道我在寻找什么来让它工作。我以前从未使用过 Razor 5,我正在尝试编写代码并同时学习它,但效果并不总是很好。
猜你喜欢
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多