Я создал контроллер с именем пользователя и приведенным ниже метидом для доступа к странице входа в систему, как показано ниже
[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 или чего-то еще.