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

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. 用bash反弹shell

    用bash反弹shell 受害主机:linux系统 攻击机:需要安装netcat(nc) 受害主机执行:ifconfig  ## 查看受害主机ip 攻击机执行:nc -lvp 19999 ## 在攻击 ...

  2. 高可用代理服务器实现keepalive+squid

    〇.前言 之前单机部署了squid代理服务器,现在实现一下高可用. 还有自定义squid的error页面 准备:两台centos7(1C2GB) ​ 三个可用IP,一主一备一虚拟IP(VIP) 一.安 ...

  3. day39-网络编程01

    Java网络编程01 1.网络相关的概念 1.1网络通信和网络 网络通信 概念:两台设备之间通过网络实现数据传输 网络通信:将数据通过网络从一台设备传输到另一台设备 java.net包下提供了一系列的 ...

  4. k8s安装常用软件的yaml文件

    参考网址:https://www.bejson.com (网站文件部分有坑,需要擦亮眼睛) nginx k8s版本:v1.20 apiVersion: apps/v1 kind: Deployment ...

  5. linux搭建内网邮件服务器

    一.配置发件服务器 1.1 根据现场IP,配置主机名 vi /etc/hosts 192.168.40.133 mail.test.com 将主机名更改为邮件服务器域名mail.test.com 1. ...

  6. 「国产系统」Tubian 0.2,兼容Windows和Android的GNU/Linux系统!

    0.3版已发布:https://www.cnblogs.com/tubentubentu/p/16733005.html Sourceforge.net主页(提供下载):https://sourcef ...

  7. 简单将Springboot项目部署到linux服务器上

    1.使用springboot的jar包方式 直接使用maven工具按照步骤点击就可以直接打包 2.到target目录下找到 jar包 3.将jar包放到linux的任意文件夹下(此项目是之前的kafk ...

  8. Python学习三天计划-1

    一.第一个Python程序 配置好环境变量后 打开CMD(命令提示符)程序,输入Python并回车 然后,在里面输入代码回车即可立即执行 Python解释器的作用是 将Python代码翻译成计算机认识 ...

  9. elementUi使用dialog的进行信息的添加、删除表格数据时进行信息提示。删除或者添加成功的信息提示(SpringBoot+Vue+MybatisPlus)

    文章目录 1.添加新用户,通过dialog的弹窗形式 1.1 添加的按钮 1.2 调用方法设置窗口可见 1.3 窗口代码 1.4 提交注册信息方法 1.5 使用mybatisPlus方法进行添加信息到 ...

  10. 2.签名&初始化&提交

      Git设置签名 签名的作用是区分不同操作者的身份,用户的签名信息在每一个版本的提交信息中能够看到, 以此确认本次提交是谁做的,git首次安装必须设置用户签名,否则无法提交代码 这里设置的用户签名和 ...