Перенаправить на другой URL для первого посещения каких-либо страниц? - PullRequest
0 голосов
/ 10 апреля 2019

Как я могу перенаправить пользователя на другой URL-адрес, если пользователь впервые посещает какую-либо страницу сайта?

Если это требуется только для домашней страницы, я могу добавить код, например:ниже в домашнем контроллере:

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 Ответ

1 голос
/ 10 апреля 2019

Я создал демо для перенаправления пользователя на URL только в первый раз из всего приложения. Вы должны переопределить метод 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();
        }
   }
}

Примечание. Дайте мне знать, если у вас есть запрос по приведенному выше коду. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...