【问题标题】:Query string is missing from return url返回 url 中缺少查询字符串
【发布时间】:2013-09-14 16:23:21
【问题描述】:

所以,我有一个只允许授权用户执行的操作。

[HttpPost]
[Authorize]
public ActionResult DoSomething(string data)
{
    StoreData(data);
    return RedirectToAction("Index", "Home");
}

在视图中,我称之为动作:

@using (Html.BeginForm("DoSomething", "Home"))
{
    @Html.Hidden("data", "12345")
    <input type="submit" value="DoIt" /> 
}

如果用户没有被授权,他/她将被重定向到登录页面,但ReturnUrl不包含查询字符串(本例中为“数据”的值)

http://localhost:62978/Account/Login?ReturnUrl=%2fHome%2fDoSomething

为什么会这样,我可以解决它吗?

【问题讨论】:

    标签: c# asp.net-mvc authorization form-authentication


    【解决方案1】:

    当 HTML 表单的方法是 POST 时,表单数据在 HTTP 请求的正文中发送。但是,当表单的方法是 GET 时,表单数据将作为 HTTP 请求中 URL 的一部分发送。

    BeginForm 默认情况下会呈现一个带有method="Post" 的表单。您要么需要明确地将表单的方法设置为FormMethod.Get。示例:

    @using (Html.BeginForm("DoSomething", "Home", FormMethod.Get))
    

    或者,在显示表单之前要求用户授权。也就是说,将 Authorize 属性添加到呈现视图的操作中。示例:

    [Authorize]
    public ActionResult DoSomething()
    {
        View();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 2021-03-14
      • 1970-01-01
      • 2012-09-21
      • 2018-12-11
      • 1970-01-01
      • 2012-09-09
      相关资源
      最近更新 更多