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

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. 【读书笔记】C#高级编程 第九章 字符串和正则表达式

    (一)System.String类 System.String是一个类,专门用于存储字符串,允许对字符串进行许多操作.C#提供了关键字string和相关的语法,以便使用这个类更轻松. 例子: 使用运算 ...

  2. 【读书笔记】C#高级编程 第七章 运算符和类型强制转换

    (一)运算符 类别 运算符 算术运算符 + - * / % 逻辑运算符 & | ^ ~ && || ! 字符串连接运算符 + 增量和减量运算符 ++ -- 移位运算符 < ...

  3. 重复造轮子 SimpleMapper

    接手的项目还在用 TinyMapper 的一个早期版本用来做自动映射工具,TinyMapper 虽然速度快,但在配置里不能转换类型,比如 deleted 在数据库中用 0.1 表示,转换成实体模型时没 ...

  4. 异步编程promise

    异步编程发展 异步编程经历了 callback.promise.async/await.generator四个阶段,其中promise和async/await使用最为频繁,而generator因为语法 ...

  5. JS数据结构之 Map

    JS数据结构之 Map Map介绍 Map(映射)是ES6引入的一种数据结构.这是一种存储键值对列表很方便的方法,类似于其他编程语言的哈希表. HashMap(哈希表),也叫做散列表.是根据关键码值 ...

  6. VMware Component Manager服务无法启动

    近日,给一台Windows 2016上的vCenter打补丁,系统重启后,发现vmware的很多服务无法启动了.这是一台老版本的vcenter,虽然已经2021年了,但是它还管理着一些很老的ESX,比 ...

  7. 我的Vue之旅、02 ES6基础、模块、路径、IO

    自定义模块 为什么要模块?模块化源代码能给我们带来什么好处? 试想一个巨无霸网购平台,在没有模块化的情况下,如果出现bug,程序员就要在几百万行代码里调试,导致后期维护成本上升,为了解决问题,模块化按 ...

  8. 学会Linux,看完这篇就行了!

    转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/797ab07d.html 你好,我是测试蔡坨坨. 对于测试同学来说,Linux基本属于必学必会内容,招聘要求中基本都会出现L ...

  9. Nginx服务器性能优化与安全配置实践指南

    转载自:https://www.bilibili.com/read/cv16151784?spm_id_from=333.999.0.0 1.引言 1.1 目的 为了更好的指导部署与测试艺术升系统ng ...

  10. 连接FastDFS出现超时问题的解决办法

    1.使用Java语言写的web项目,jeecg框架连接FastDFS,需要修改的信息如下: # WEB-INF/classes/fdfs_client.conf connect_timeout=300 ...