Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 强制用户在进入URL中的页面之前先浏览另一个页面_C#_Asp.net Mvc 4_Routes - Fatal编程技术网

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是如何运作的