页面路径传参跳到那带到哪

1、全局过滤(继承过滤也行)。这里使用的全局过滤

2、过滤判断需要登录的话,获取本次路径传到登录的页面

3、登录的页面判断是微信浏览器的话,参数带到微信登录接口

4、微信登录接口处理后的返回Handle方法不就得到了原页面的URL

上代码

----------------------------------------------------------------------全局过滤begin--------------------------------------------------

 protected void Application_Start()
{
//在applicationstart注册过滤类
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
/ /application_start在Global.asax里面。这个知道吧。
} //过滤类有很多全局过滤
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//在FilterConfig中注册全局异常过滤类
filters.Add(new ExceptionFilter());
//在FilterConfig中注册全局HTTP过滤类 加粗标红,要考的
filters.Add(new SupportFilterAttribute());
}
}

  

public class SupportFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string ctlName = filterContext.Controller.ToString();
string[] routeInfo = ctlName.Split('.');
string controller = null;
int ctlIndex = Array.IndexOf(routeInfo, "Controllers");
controller = routeInfo[ctlIndex].Replace("Controller", "").ToLower();
if (controller != "login")
{
if (filterContext.HttpContext.Session["Account"] == null)
{
//获取当前url
string _url = HttpContext.Current.Request.Url.ToString().ToLower(); //重定向到登录
filterContext.HttpContext.Response.Redirect("/Login/Index?oldurl=" + _url);
}
}
}
}

----------------------------------------------------------------------全局过滤end--------------------------------------------------

----------------------------------------------------------------------Login页面begin--------------------------------------------------

<script>

    $(function () {
//看吧,这里获取到原来的路径
var _oldurl = request("oldurl");
if (_auto != "false") {
if (wx_or_browser() == 1) {
layui.use(['layer'], function () {
var $ = layui.$;
layer.msg('登录中...', {
icon: 16
, shade: 0.01
});
});
//是微信浏览器打开的页面。跳转到自动登录
window.location.href = "/Login/WxWebLogin?oldurl=" + _oldurl;
}
}
})
</script> //下面是封装的js方法
<script>
//获取前台传值
function request(strParame) {
var args = new Object();
var query = location.search.substring(1);
var pairs = query.split("&"); // Break at ampersand
for (var i = 0; i < pairs.length; i++) {
var pos = pairs[i].indexOf('=');
if (pos == -1) continue;
var argname = pairs[i].substring(0, pos);
var value = pairs[i].substring(pos + 1);
value = decodeURIComponent(value);
args[argname] = value;
}
return args[strParame];
}
//判断微信浏览器还是别的浏览器 微信浏览器返回1,其他返回2
function wx_or_browser() {
var ua = navigator.userAgent.toLowerCase();
var isWeixin = ua.indexOf('micromessenger') != -1;
if (isWeixin) {//是在微信中打开的
return 1;
} else {
return 2;
}
}
</script>

----------------------------------------------------------------------Login页面end--------------------------------------------------

----------------------------------------------------------------------微信公众号自动登录begin--------------------------------------------------

 //微信浏览器打开的时候,转到这个页面
public ActionResult WxWebLogin()
{
//获取当前域名
string domainName = ConfigurationManager.AppSettings["DomainName"].ToString();
//原页面继续传输
string sysurl = Request.QueryString["oldurl"]; string redirect_uri = string.Format("http://{0}/Login/WxWebLoginHandle?oldurl={1}", domainName, sysurl);
string url = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_userinfo&state=snsapi_userinfo_ok#wechat_redirect", WXmodel.appid, redirect_uri);
Response.Redirect(url);
return View();
}
//公众号获取权限信息后跳转到这里,WxWebLogin方法设置的
public ActionResult WxWebLoginHandle()
{
try
{ if (HttpContext.Request.QueryString["state"] != null)
{ string state = HttpContext.Request.QueryString["state"].ToString();
string code = HttpContext.Request.QueryString["code"].ToString();
//取出原页面地址
string oldurl = HttpContext.Request.QueryString["oldurl"].ToString(); //获取网页token
//获取webtoken
WxBegin.GetWebToken(code, ref postString);
//拉取用户信息
string url = string.Format("https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN", WXmodel.web_access_token, WXmodel.web_openid);
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "GET";
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream stream = resp.GetResponseStream();
string result = "";
//获取内容
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
result = reader.ReadToEnd();
} string errcode = JSCommon.GetJsonValue(result, "errcode");
if (string.IsNullOrEmpty(errcode))
{ WXUserInfo wxU = JsonHandler.Deserialize<WXUserInfo>(result); int i = new Apps.BLL.PhoneLoginBLL().CreateUser(wxU, ref postString);
if (i > 0)
{
tb_User user = new Apps.BLL.PhoneLoginBLL().GetUser(wxU.openid);
//自动登录
postString += "\r\nuser:" + user.openId;
AccountModel account = new AccountModel();
account.Id = user.guid;
account.Photo = user.headimgurl;
account.UserName = user.userName;
account.LoginSource = "gzh-auto";
account.OpenId = user.openId;
account.UserType = user.uType;
Session["Account"] = account;
postString += "\r\nsessionid:" + Session.SessionID;
LoginUserManage.Add(Session.SessionID, account.Id); //检查是否有快捷跳转的
if (!string.IsNullOrEmpty(oldurl))
{
Response.Redirect(oldurl);
}
else
{
if (user.uType == 1)
{
//用户首页
Response.Redirect("/home/index");
}
else
{
//别的首页
Response.Redirect("/enjoy/index");
}
}
}
else
{
return Content(@"<script >alert('用户信息拉取失败,正跳转手动登录');
setTimeout(function(){
window.location.href='/Login/index?auto=false';
},300)
</script >");
}
}
else
{
string a = WxError.WxErrorHadle(result);
if (!string.IsNullOrEmpty(a))
{
throw new Exception(a);
}
}
} }
catch (Exception)
{
throw;
}
return Content("");
}

  

----------------------------------------------------------------------微信公众号自动登录end--------------------------------------------------

随笔——mvc公众号自动登录跳转到原页面的方法的更多相关文章

  1. Chrome插件:微信公众号自动登录(chrome.extension)

    manifest.json: { "manifest_version": 2, "name": "WX.AutoLogin", " ...

  2. 【tp5.1】微信公众号授权登录及获取信息录入数据库

    微信公众号开发文档链接:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432 微信公众号授权登录分为两种: 1.以 ...

  3. 解决微信公众号授权登录和开放平台微信第三方应用授权登录获取到的用户Openid关联问题

    开发背景: 最近一段时间一直在做关于微信方面的网站应用开发,这段时间也收获的不少关于微信开发方面的开发技能,接触的比较多的主要有微信公众号和微信网站app第三方登录授权,以及微信会员卡,优惠券和扫描二 ...

  4. Struts2通过自己定义拦截器实现登录之后跳转到原页面

    这个功能对用户体验来说是非常重要的.实现起来事实上非常easy. 拦截器的代码例如以下: package go.derek.advice; import go.derek.entity.User; i ...

  5. Struts2透过自定义拦截器实现登录之后跳转到原页面

    Struts2通过自定义拦截器实现登录之后跳转到原页面 这个功能对用户体验来说是非常重要的.实现起来其实很简单. 拦截器的代码如下: package go.derek.advice; import g ...

  6. 实现微信公众号自动登陆自己的Web App

    测试: 基本的思路是通过公众号OAuth API获取用户微信的openid.第一次使用的时候让用户登录,然后在数据库里把openid和自己应用的userid对应起来.以后获得用户的openid之后就可 ...

  7. 微信公众号授权登录后报redirect_uri参数错误的问题

      在进行微信公众号二次开发的时候,需要通过授权码模式来进行微信授权.比如,在进行登录的时候,用户点击了登录按钮,然后弹出一个授权框,用户点击同意后,就可以获取用户的OpenId等信息了.这篇文章主要 ...

  8. 微信公众号授权登录,提示“redirect_uri 参数错误”

    做微信公众号开发授权登录的时候遇到的坑... 后台服务用node,index.js相关代码如下: const oauth = new OAuth(conf.appid, conf.appsecret) ...

  9. uniapp - 微信公众号授权登录

    [缘由] 采用uniapp进行微信小程序和微信公众号双版本开发:考虑到用户唯一性,我们后端确定了以“unionid”.作为唯一标识. 有的小伙伴估计也是刚入这坑,我就简单说一下步骤流程   [摸索] ...

  10. C#三种模拟自动登录和提交POST信息的实现方法

    网页自动登录(提交Post内容)的用途很多,如验证身份.程序升级.网络投票等,以下是用C#实现的方法.       网页自动登录和提交POST信息的核心就是分析网页的源代码(HTML),在C#中,可以 ...

随机推荐

  1. AXI MCDMA 仿真与工作流程分析

    说明 关于背景知识,可以先看 https://www.cnblogs.com/xingce/p/16386108.html 引用一段官方的说明,AXI MCDMA存在的主要目的是为了节约资源,我们想要 ...

  2. Windows 10中蓝牙鼠标连接

    最近遇到了一个问题,Windows 10中的蓝牙鼠标无法连接. 在添加蓝牙鼠标的时候系统提示输入PIN码.通常在蓝牙连接两个系统的时候会需要双方输入PIN码来确认身份,但是鼠标这种设备是没有地方显示P ...

  3. maxHBLT的合并&初始化&时间复杂度分析

    1. 定义 [extened binary tree] 扩充二叉树是有 external node (用来代替空子树, 也就是 nullptr) 的 binary tree. 对应地, 其他 node ...

  4. JDK8中String的intern()方法详细解读【内存图解+多种例子+1.1w字长文】

    写在前面,欢迎大家关注小编的微信公众号!!谢谢大家!! 一.前言 String字符串在我们日常开发中最常用的,当然还有他的两个兄弟StringBuilder和StringBuilder.他三个的区别也 ...

  5. mysql8 安装与配置文件添加时区

    mysql默认时区选择了CST mysql>show variables like '%time_zone%'; 解决办法:(建议通过修改配置文件来解决) 通过命令在线修改: mysql> ...

  6. CentOS6 配置阿里云 NTP 服务

    本文以Centos 6.5为例介绍如何修改Linux实例时区,以及开启和配置Linux NTP服务,保证实例本地时间精确同步. 前提条件 NTP服务的通信端口为UDP 123,设置NTP服务之前请确保 ...

  7. Linux Hardening Guide

    文章转载自:https://madaidans-insecurities.github.io/guides/linux-hardening.html 1. Choosing the right Lin ...

  8. 安全强化Linux 服务器的七个步骤

    这篇入门文章将向你介绍基本的 Linux 服务器安全知识.虽然主要针对 Debian/Ubuntu,但是你可以将此处介绍的所有内容应用于其他 Linux 发行版.我也鼓励你研究这份材料,并在适用的情况 ...

  9. 市面上erp软件那么多,为什么很多卖家选择定制erp?

    为什么选择定制ERP?适合自己的才是最好的啊!就连头部ERP企业提供给用户的ERP系统,应该也没有不进行个性化定制的吧,匹配很重要!规模不同.行业不同.发展阶段不同.生产模式不同.管理理念不同,适用的 ...

  10. SpringBoot的starter到底是什么?

    前言 我们都知道,Spring的功能非常强大,但也有些弊端.比如:我们需要手动去配置大量的参数,没有默认值,需要我们管理大量的jar包和它们的依赖. 为了提升Spring项目的开发效率,简化一些配置, ...