Как разделить значение сеанса между несколькими контроллерами в MVC C#? - PullRequest
1 голос
/ 11 февраля 2020

Привет всем, я пытаюсь обмениваться значениями объектов с помощью Sessions на разных контроллерах, я в некотором роде потерян, потому что способ обработки аутентификации на моем веб-сайте не описан ни в одной статье, ни в руководстве, к которому я могу обратиться, чтобы следовать вверх "с ​​практическими рекомендациями"

В любом случае у меня есть BaseController, который используется совместно с другими контроллерами, который имеет "BaseController.verifyAccess (string user, string password)", что он делает, он идет и регистрируется моя БД, если у пользователя есть доступ к View

BaseController.cs

public class User
{
    public int ID { get; set; }
    public string username { get; set; }
    public string password { get; set; }
    public string email { get; set; }
}

AccountController.cs

[HttpPost]
public ActionResult Login(FormCollection form)
{
    User userTest = new User();
    userTest.username = form["username"];
    userTest.password = form["password"];
    Session["username"] = userTest.username;

    if (verifyAccess(userTest.username, userTest.password))
    {
        return RedirectToAction("../LoggedIn");
    }
    else
    {
        return RedirectToAction("../Login");
    }
}

Как мне заставить Session["username"] = userTest.username; работать на других контроллерах ??

Например

SomeController.cs

[HttpPost]
public ActionResult MyAwesomeView(FormCollection form)
{
    Project.Models.MyAwesomeModel thisModel = new Models.MyAwesomeModel();
    thisModel._info1 = form["txtInfo1"];
    thisModel._info2 = form["txtInfo2"];
    thisModel._info3 = form["txtInfo3"];
    thisModel._info4 = form["txtInfo4"];
    thisModel._user = System.Web.HttpContext.Current.Session["username"].ToString();
    return View(modelPagosRecibidos);
}

во время отладки thisModel._user - ноль, плюс я думаю, что я делаю это сильно неправильно, я прошу прощения, если кто-то вздохнет на мой код, в любом случае надеюсь получить некоторую помощь и руководство о том, как передать значения Session через мои контроллеры, заранее всем спасибо!

1 Ответ

1 голос
/ 11 февраля 2020

Попробуйте приведенный ниже фрагмент кода. Как только вы назначите свою информацию на Application Session, она будет доступна на каждом Client Controller, который вы можете получить из этого сеанса, как в примере, который я показал.

 public class DeshboardController : Controller
    {
        // GET: Admin
        public ActionResult Index()
        {
            string roleid = (string)Session["user_role_id"];
            string userid = (string)Session["user_au_id"];
            string companyId = (string)Session["company_id"];
            string accessToken = (string)Session["AccessToken"];
            string ConName = "Deshboard";
            string ActionName = "index";

            if (string.IsNullOrEmpty(roleid) || string.IsNullOrEmpty(userid) || string.IsNullOrEmpty(companyId))
            {
                Response.Redirect("/Login/Index");
            }
            bool permission = CoreRules.UserPermission(roleid, userid, ConName, ActionName, accessToken);
            if (!permission)
            {
                try
                {
                    Response.Redirect("/Error/Index");
                }
                catch (Exception ex)
                {
                    Response.Redirect("/Login/Index");
                }
            }


            return View();
        }
    }

Кроме того, вы можете установить действительность токена на Web.config файл как показано ниже

 <appSettings>
    <add key="TokenExpiry" value="45" />
 </appSettings>

Я установил время токена на 45 минут. Вы можете настроить согласно вашему требованию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...