我知道您提到不想解析 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。
当用户登录后,开始在你的 Url 中使用 sessionId;
[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 之外的任何东西,您最好使用一些识别当前登录用户的东西。