Member 14168150 Ответов: 1

Returnurl в MVC-это всегда имеет значение null, после повторного входа в систему от сессии сбросить


Я работаю над приложением MVC, которое имеет аутентификацию входа в систему и тайм-аут через некоторое время после входа в систему. Поэтому я хочу иметь возможность войти в систему и вернуться на ту страницу, на которой я был, а не на статическую домашнюю страницу.


Каждый раз, когда меня выгоняют, я получаю "учетную запись/логин?Returnurl в = ... "в моем браузере, но мой отладчик внутри метода Login ActionResult post всегда говорит, что мой returnUrl равен нулю. Я устал от следующего метода, до этого я пробовал и другие методы, но ни один из них не сработал. Так что я действительно застрял пожалуйста помогите:

Что я уже пробовал:

"AccountController.cs" :

public sealed class AccountController : BaseController
    {
        //Login prompt
        // GET: /Account/Login
        [AllowAnonymous]
        public ActionResult Login() {

            return View();

        }

        //Login processing(authentication)
        // POST: /Account/Login
        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        
        public ActionResult Login( LoginViewModel model, string returnUrl) {
            if ( ModelState.IsValid ) {
                var authenticated = AuthenticationProvider.Authenticate( model.UserName, model.Password, HttpContext );
                
                if( authenticated ) {
                    if (Url.IsLocalUrl(returnUrl))
                    {
                        ViewBag.ReturnUrl = returnUrl;
                        return Redirect(returnUrl);
                    }
                  
                }

                ModelState.AddModelError( "", "Invalid username or password." );
            }

            return View( model );
        }



Форма "Loging.cshtml" :
@using (Html.BeginForm("Login", "Account", FormMethod.Post, new { ReturnUrl = Request.QueryString["ReturnUrl"] }))
    { .... 


"web.config":

<modules>
     <remove name="FormsAuthentication" />
     <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />
   </modules>

MadMyche

Как долго длится "через некоторое время после входа в систему"? Вы просматриваете сайт или смотрите на страницу в течение этого времени?

1 Ответов

Рейтинг:
1

F-ES Sitecore

Вы ничего не добьетесь с параметром ReturnUrl в HttpGet. Для того чтобы он был доступен в HttpPost, вам нужно будет сохранить его в форме.

Измените класс LoginViewModel, чтобы добавить свойство ReturnUrl

public string ReturnUrl { get; set; }


Захватите url-адрес в методе HttpGet и убедитесь, что он включен в форму

public ActionResult Login(string returnUrl)
{
    LoginViewModel model = new LoginViewModel();
    model.ReturnUrl = returnUrl;

    return View(model);
}

[HttpPost]
public ActionResult Login(LoginViewModel model)
{
    return View(model);
}


@model LoginViewModel

@using (Html.BeginForm())
{
    @Html.HiddenFor(m => m.ReturnUrl)

    // rest of form

    <input type="submit" value="Login"/>
}