Я знаю, что вы упомянули, что не хотите анализировать URL-адрес, но использование URL-адреса с маршрутизацией кажется простым и быстрым решением, добавьте параметр в ваши маршруты:
В вашем Global.asax
routes.MapRoute(
"SessionIdUrl",
"{sessionId}/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
Создайте базовый контроллер и сделайте SessionId доступным для вашего контроллера:
public class BaseController : Controller
{
public string UrlSessionId { get; set; }
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
object sessionId = "";
if (filterContext.RouteData.Values.TryGetValue("sessionId", out sessionId))
{
UrlSessionId = sessionId.ToString();
}
}
}
На вашем контроллере наследуется от этого базового контроллера:
public class HomeController : BaseController
Итак, ваш контроллер имеет доступ к base.UrlSessionId.
Когда пользователь войдет в систему, начните использовать sessionId в своем URL;
[HttpPost]
public ActionResult SignIn(User data)
{
// authenticate
return RedirectToAction("AfterSignedIn", new { sessionId = Session.SessionID, id = "my id" } );
}
В ваших представлениях создайте ссылку с идентификатором SessionId следующим образом:
@Html.ActionLink("My link", "ActionWithUrlSession", "YourController", new { sessionId = Session.SessionID, id = "my id" }, null)
Итак, вы можете использовать что-то еще, кроме Session.SessionID, возможно, вам лучше использовать что-то, идентифицирующее текущего пользователя, вошедшего в систему.