随笔——mvc公众号自动登录跳转到原页面的方法

2023-02-16,,,,

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

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公众号自动登录跳转到原页面的方法的相关教程结束。

《随笔——mvc公众号自动登录跳转到原页面的方法.doc》

下载本文的Word格式文档,以方便收藏与打印。