C# 强制用户在进入URL中的页面之前先浏览另一个页面
例如,如果用户试图访问一个C# 强制用户在进入URL中的页面之前先浏览另一个页面,c#,asp.net-mvc-4,routes,C#,Asp.net Mvc 4,Routes,例如,如果用户试图访问一个Main操作,并在地址栏中输入mySite/Main,我想强制它路由到mySite/beforeMain,经过一些处理后,它会自动重定向到Main。我如何使用路线映射来实现这一点,或者通过其他方式实现这一点?我不想在URL中包含查询字符串参数,也不想在禁用Cookie时使用TempData/等。也许您可以使用 或者,您可以使用重定向到操作: public ActionResult Main() { if(Request.QueryString["redirect
Main
操作,并在地址栏中输入mySite/Main
,我想强制它路由到mySite/beforeMain
,经过一些处理后,它会自动重定向到Main
。我如何使用路线映射来实现这一点,或者通过其他方式实现这一点?我不想在URL中包含查询字符串参数,也不想在禁用Cookie时使用TempData/等。也许您可以使用
或者,您可以使用重定向到操作
:
public ActionResult Main()
{
if(Request.QueryString["redirected"].ToString() != "true")
{
return RedirectToAction("beforeMain", "mySite");
}
return View();
}
然后您的beforeMain
操作可以是:
public ActionResult BeforeMain()
{
//do some stuff
return RedirectToAction("Main", new { redirected = "true" });
}
然后,当你第二次点击main时,它将跳过重定向,你不会陷入循环。谢谢,我会检查Url重写,但除此之外,现在:从main重定向的问题是,我不知道这是否是我第一次重定向,因为
beforeMain
将重定向回。如果没有检查,就会有一个重定向循环——但是如果没有路由值或TempData,我就无法检查我能想到的任何东西。是否可以不将查询字符串附加到URL?这是我遇到的问题的一部分--由于附加的查询字符串,我不想使用路由值。您可以使用会话来存储值,而不是我猜HTTP是无状态的,您需要一些跨回发持久化数据的方法。。。为什么要隐藏查询字符串?还有,您可以将“干净”url(不带querystring)重写为具有querystring的url。用户不会在地址栏中看到它。恐怕我不知道MVC是如何运作的