(利用tempdata判断action是直接被访问还是重定向访问)防止微信活动中用户绕过关注公众号的环节

说明:这个不是在进行微信公众号开发,也就是说在不能获取用户openid的前提下做的下面操作

1.动机:最近有个微信活动(关注了服务号的可以免费领取礼品),要做这么一个功能,活动的入口在微信服务号的菜单上,只有从这里链接过来的用户才有权限看到领取礼品的表单,否则就是引导关注微信服务号的链接,但是为了防止用户直接将活动也分享出去了,然后其他用户避开了关注微信这样一个环节,所有已关注的用户打开活动链接之后的地址和服务号上的入口链接地址不能一样

2. 意图:我想在服务号的入口上加上一个参数,标明是从微信过来的(表明是已经关注了服务号的),然后在用户打开活动的时候再想办法将这个参数去掉或者变成其他的参数,就能保证用户打开前跟分享的地址是不一样的;而这里我就利用了tempdata能在action之间传递数据的特性实现了这个功能

3. 代码

 public ActionResult Topic_JieYuan()
        {
            int count = bllOrders.GetOrderCount();
            ViewData["count"] = count;
            if (Request["isweixin"] != null)  //表明是从微信过来的
            {
                TempData["isweixin"] = 1;
                return RedirectToAction("Topic_JieYuan", "topic", new { isfirst = 1 }); //进行重定向生成新的url,新url地址中有一个参数是isfirst =1与最原始的url不一样(用户分享的话是新的url),当下次有人直接打开分享的地址时,由于TempData["isweixin"] = null所以不会运行 ViewData["isback"] = 1;这段(前台是根据 ViewData["isback"] = 1;来做一些权限判断显示的)
            }
            if (Request["isfirst"] != null && TempData["isweixin"] != null)
            {
                ViewData["isback"] = 1;
            }
           
            return View("/Views/Topic/JieYuan/topicjieyuan.aspx");
        }
//同上
  public ActionResult JieYuan() 
        {
            //if (!Request.Headers["User-Agent"].Contains("MicroMessenger"))
            //{
            //    Response.Redirect("/topic/jieyuan.htm");
            //    return View("/Views/Topic/JieYuan/topicjieyuan.aspx");
            //}

            if (Request["isback"] == null)
            {
                TempData["isweixin"] = 1;
                return RedirectToAction("JieYuan", "topic", new { isback = 1 });
                //Response.Redirect("/topic/jieyuan.htm?isweixin=1&isback=1");
                //return View("/Views/Topic/JieYuan/topicjieyuan.aspx");
            }
            if (TempData["isweixin"] == null)
            {
                return RedirectToAction("Topic_JieYuan", "topic");
            }

            Hashtable htRegion = new Hashtable();
            htRegion.Add("ParentId", 0);
            List<Jiyun.Model.Jy_Hishop_Regions> listRegion = bllOrders.GetRegionsList(htRegion);
            ViewData["list"] = listRegion;
            return View("/Views/Topic/JieYuan/Index.aspx");
        }
View Code

 PS:利用了tempdata能在action之间传递值的特性

ps:演化过程 要判断从微信来的和非微信来的链接-->(转化成)判断链接上是否带有isweixin的参数-->(而这个参数在程序中直接转化等同于了有没有tempdata)判断有没有tempdata-->然后根据有没有tempdata做相应的操作

原文地址:https://www.cnblogs.com/lihongchen/p/4514688.html