Строка запроса отсутствует в возвращаемом URL

Итак, у меня есть действие, которое разрешено только авторизованным пользователям.

[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

Почему так и можно ли это исправить?


person tuta4    schedule 14.09.2013    source источник


Ответы (1)


Когда метод HTML-формы POST, данные формы отправляются в теле HTTP-запроса. Однако, когда метод формы — GET, данные формы отправляются как часть URL-адреса в HTTP-запросе.

BeginForm по умолчанию отображает форму с method="Post". Вам либо нужно явно установить метод формы на FormMethod.Get. Пример:

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

Кроме того, перед отображением формы требуется авторизация пользователя. То есть добавьте атрибут Authorize к действию, которое отображает представление. Пример:

[Authorize]
public ActionResult DoSomething()
{
    View();
}
person Adrian Toman    schedule 15.09.2013