返回网址缺少查询字符串

时间:2013-09-14 16:23:21

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

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

[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

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

1 个答案:

答案 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();
}