2

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

[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

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

4

1 回答 1

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();
}
于 2013-09-15T06:32:54.260 回答