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