Членство в ASP.NET MVC: кто должен предоставлять метод returnUrl методу LogOn? - PullRequest
0 голосов
/ 03 сентября 2010

Вот определение метода действия входа в систему.

[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
  // more inside
}

У меня есть основной вопросПоставляет ли фреймворк string returnUrl?или у меня есть такая ответственность?

Спасибо за помощь.

Ответы [ 3 ]

3 голосов
/ 03 сентября 2010

Это зависит от того, кто вызывает этот метод и указывается ли этот параметр в запросе POST. Например, если пользователь пытается получить доступ к действию контроллера, украшенному атрибутом [Autorize], и он не аутентифицирован, платформа автоматически перенаправляет на действие LogOn (то, которое отображает форму, а не то, которое имеет [HttpPost]) и укажите параметр returnUrl. Тогда в форме входа в систему может быть скрытое поле, чтобы сохранить его значение, чтобы при вводе учетных данных и отправке формы в действие LogOn в случае успешного входа он перенаправлялся на первоначально запрашиваемую страницу.

1 голос
/ 03 сентября 2010

Ну, как я иногда делаю, я отвечаю на свой вопрос, чтобы добавить больше информации о том, как я решил проблему после того, как другие люди ответили (в данном случае, Дарин Димитров).

Вкратце, @Darin Dimitrovобъяснил мне, что мне нужно предоставить returnUrl, если перенаправление на метод действия LogOn не является результатом принуждения пользователя к предоставлению учетных данных (когда метод пытается получить доступ, имеет атрибут [Authorize]).Мне нужно использовать new { returnUrl = RouteData.Values["action"] } для предоставления этого значения.

Вот некоторые проблемы:

  1. Intellisense не распознал `` RouteData.Values ​​["action"],Мне нужно было использовать Page.RouteData.Values["action"]

  2. Я продолжал получать следующую ошибку: «ресурс не найден», URL показывает http://example.com/Account/Whatever_action_is_in_the_returnUrl.Это имеет смысл, потому что я поставил только строку действия.

  3. Я сделал это

    new
    {
        returnUrl = Page.RouteData.Values["controller"] + "/" + Page.RouteData.Values["action"]
    } 
    

    Но я получил ошибку: "ресурс не найден", отображение URL http://example.com/Account/myController/myAction.Учетная запись все еще находилась в URL-адресе, вызывая ту же ошибку.

  4. Наконец, в начале я добавил еще одну косую черту, и она заработала.

    new
    {
        returnUrl = "/" + Page.RouteData.Values["controller"] + "/" + Page.RouteData.Values["action"]
    } 
    

Похоже, важно знать многие лица бизнеса перенаправлений.До сих пор я в основном использовал RedirectToAction().

Спасибо @Darin Dimitrov.

0 голосов
/ 07 ноября 2013

Попробуйте добавить следующее в представление, предоставляющее логон

@using (Html.BeginForm("index", "signin", new { ReturnUrl = Request.QueryString["ReturnUrl"] }))
...