返回 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
为什么会这样,我可以解决它吗?
当HTML表单的方法为POST时,表单数据将在HTTP请求的正文中发送。但是,当表单的方法为 GET 时,表单数据将作为 HTTP 请求中 URL 的一部分发送。
默认情况下,BeginForm
将呈现一个带有method="Post"
的表单。您需要将窗体的方法显式设置为 FormMethod.Get
。例:
@using (Html.BeginForm("DoSomething", "Home", FormMethod.Get))
或者,在显示表单之前需要用户授权。也就是说,将 Authorization 属性添加到呈现视图的操作中。例:
[Authorize]
public ActionResult DoSomething()
{
View();
}