ReturnURl не приходит при попытке доступа не авторизовать действие контроллера - PullRequest
0 голосов
/ 07 декабря 2018

Я создал контроллер с именем пользователя и приведенным ниже метидом для доступа к странице входа в систему, как показано ниже

    [HttpGet]
    [AllowAnonymous]
    public ActionResult Login(string ReturnUrl)
    {
        if (User.Identity.IsAuthenticated)
        {
            FormsAuthentication.SignOut();
        }
        ViewBag.ReturnUrl = ReturnUrl;         
         return View(); 
    }

    [HttpPost]
    public ActionResult Login(ClientModel model)
    {
        var result = _logservices.ClientLogin(model);
        if (result.Email == null)
        {
            AddCustomErrors("Invalid Credential");
        }
        else
        {
            SignIn(result.Id + "_" + result.Name + "_" + result.Email + "_" + result.PhoneNumber + "_" + result.CompanyName, true, true, "Admin", model.ReturnUrl);
            if (!String.IsNullOrEmpty(Convert.ToString(Session["returnurl"])))
                return RedirectToAction(Convert.ToString(Session["returnurl"]));
            else
                return RedirectToAction("GetTicketList", "Ticket");
        }
        return View(model);
    }

моя сторона входа в систему выглядит так, как показано ниже

 @using (Html.BeginForm("Login", "Login", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { role = "form" }))
        {
        }

Теперь яу меня есть другой контроллер с именами Ticket и там я сделал метод авторизации, как показано ниже

    [HttpGet]
    [Authorize(Roles = Admin)]
    public ActionResult CreateTicket()
    {
        TicketModel model = new TicketModel();
        model.TicketStatus = _ticketservices.GetTicketStatus();
        if (User.Identity.IsAuthenticated)
        {
            model.ClientId = Convert.ToInt32(User.Identity.Name.Split('_')[0]);
            model.ContactName = User.Identity.Name.Split('_')[1];
            model.Email = User.Identity.Name.Split('_')[2];
            model.PhoneNumber = User.Identity.Name.Split('_')[3];
            model.TicketStatusID = 1;
        }
        return View(model);
    }

На странице global.asax у меня есть код возврата, как показано ниже

  protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
    {
        try
        {
            var authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
            if (authCookie != null)
            {
                FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
                if (authTicket != null && !authTicket.Expired)
                {
                    var roles = authTicket.UserData.Split(',');
                    HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(new FormsIdentity(authTicket), roles);
                }
            }
        }
        catch (Exception ex)
        {
            FormsAuthentication.SignOut();
        }
    }

, но когда я пытаюсьДоступ к моему методу с URL-адресом как Ticket / CreateTicket показывает ошибку 401 вместо перенаправления на страницу входа с обратным URL-адресом как ticket.GetTicket.Мне не хватает чего-то в web.config или чего-то еще.

...