返回 URL 中缺少查询字符串

本文关键字:查询 字符串 URL 返回 | 更新日期: 2023-09-27 18:31:28

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

[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 不包含查询字符串(在本例中为"data"的值)

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

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

返回 URL 中缺少查询字符串

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

默认情况下,BeginForm将呈现一个带有method="Post"的表单。您需要将窗体的方法显式设置为 FormMethod.Get 。例:

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

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

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