第一次重定向到其他网址是否访问任何页面?

时间:2019-04-10 03:36:50

标签: c# asp.net-mvc

如果这是用户第一次访问网站的任何页面,如何将用户重定向到其他网址?

如果仅主页需要此代码,则可以在主控制器中添加以下代码:

string cookieName = "NotFirstTimeVisit";
if (!HttpContext.Request.Cookies.AllKeys.Contains(cookieName))
{
    // first time, add a cookie.
    HttpCookie cookie = new HttpCookie(cookieName);
    cookie.Value = "True";
    HttpContext.Response.Cookies.Add(cookie);

    var url = ConfigurationManager.AppSettings["FirstTimeVisitUrl"];
    // redirect to the page for first time visit.
    return Redirect(url);
}

但是问题是:用户第一次访问时可能无法浏览主页。例如,用户可能会获得一个共享链接,即https://example.com/shared_001/002,那么它将不会被重定向。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我创建了一个演示,用于将用户重定向到整个应用程序中的第一次。 您必须覆盖OnActionExecuting 方法,以检查用户是否被提前重定向。

1。为覆盖动作过滤器创建一个类(在动作过滤器之前)。

namespace Example.Helper
{
    public class ValidateUserLoggedIn : ActionFilterAttribute
    {
        /// <summary>
        /// Method for redirect to url first time only
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            try
            {
                string cookieName = "NotFirstTimeVisit";
                if (!HttpContext.Current.Request.Cookies.AllKeys.Contains(cookieName))
                {
                    // first time, add a cookie.
                    HttpCookie cookie = new HttpCookie(cookieName);
                    cookie.Value = "True";
                    HttpContext.Current.Response.Cookies.Add(cookie);

                    // You can add your URL here
                    filterContext.Result = new RedirectToRouteResult(
                                                                    new RouteValueDictionary
                                                                    (new
                                                                    {
                                                                        controller = "Department",
                                                                        action = "Index"
                                                                    }
                                                                ));
                }
                base.OnActionExecuting(filterContext);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message.ToString());
            }
        }
    }
}

2。根据您的要求,根据操作,将上述方法调用到控制器,全局文件。

namespace Example.Controllers
{
    [ValidateUserLoggedIn] // Action Filter class
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult About()
        {
            ViewBag.Message = "Your application description page.";

            return View();
        }
   }
}

注意:如果您对以上代码有任何疑问,请告诉我们。谢谢!