IHttpHandler执行1次,代码执行2次
微信授权的代码 简单说明一下.
OAuth.ashx
看起来也没问题...而且这代码也运行几年了.. 授权都正常 第一次不带code 跑到微信拿授权 回来有code 然后拿用户信息.
而且我确定Redirect之后的代码 不会在执行..
最近要加一个日志处理下接口耗时.. 于是我写了一个IHttpModule 代码大概如下.
这代码加上 并且在webserver节点配置之后 居然影响了上面授权代码...
从insert 的日志来看 代码执行了2次 第一次没code 第二次有code 是正常情况.
但是从log(url)来看.. 同样的url 输出了2次..
2018-10-30 14:31:45:3108:https://open.weixin.qq.com/connect/oauth2/authorize...
2018-10-30 14:31:45:6546:https://open.weixin.qq.com/connect/oauth2/authorize...
这个是我之前截取的.. 因为这个code有一次有效 所以他又请求了腾讯接口一次 第一次就失效了..
然后我就获取不到openid了...
一旦进行使用"过滤器". 那么这代码就失效..
如果注视掉的话.. 就没问题....
所以问题在哪呢?
----------------------------------------------分割线2018年10月30日 17:52:32------------------------------------
经过我几次的测试.我发现了..在end_request方法里面..
如果啥都不写.. 正常
然后我一行一行测试..
发现 居然是执行sql的那句话有问题..
只要执行insert语句. 那么就会执行2次上面的代码..
如果//. 就是正常的.
敢问. 我执行sql 跟他们有关系吗?
就用了dapper 没别的东西 为什么会影响呢?
OAuth.ashx
var code=request["code"]??"";
var openid="";
if code==""
{
//没授权 生成url 跳转到微信 回调.
var url="open.weix.......?redirect_uri=OAuth.ashx";
log(url);
Response.Redirect(url);
}
else
{
//已经授权 根据code token拿用户信息.
var user="api/userinfo/token=....code=....";
openid=user.openid;
}
var url="list.aspx?uid="+openid;
Response.Redirect(url);
看起来也没问题...而且这代码也运行几年了.. 授权都正常 第一次不带code 跑到微信拿授权 回来有code 然后拿用户信息.
而且我确定Redirect之后的代码 不会在执行..
最近要加一个日志处理下接口耗时.. 于是我写了一个IHttpModule 代码大概如下.
context.BeginRequest += context_BeginRequest;
context.EndRequest += context_EndRequest;
void context_BeginRequest(object sender, EventArgs e)
{
var application = sender as HttpApplication;
var context = application.Context;
var request = context.Request;
var response = context.Response;
var fidder = new string[2] { "ashx", "aspx" };
var path = request.Path.ToLower().Split('.')[1];
if (fidder.Contains(path))
{
var stopwatch = new Stopwatch();
stopwatch.Start();
context.Items[KEY] = stopwatch;
}
}
void context_EndRequest(object sender, EventArgs e)
{
var application = sender as HttpApplication;
var context = application.Context;
var request = context.Request;
var response = context.Response;
var stopwatch = context.Items[KEY] as Stopwatch;
if (stopwatch != null)
{
stopwatch.Stop();
var time = stopwatch.ElapsedMilliseconds;
var txt = new StringBuilder();
txt.Append(request.Url.Host);
txt.Append(request.Url.Port.ToString()));
txt.Append(request.Url.AbsolutePath);
txt.Append(request.Url.Query);
var url = txt.ToString();
var md = request["method"] ?? "-1";
var ip = request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? "";
if (ip == "")
{
ip = request.ServerVariables["REMOTE_ADDR"] ?? "";
}
var sql = "insert.........";
DapperHelper.Execute(sql, new
{
reqtime = DateTime.Now,
reqIP = ip,
url,
method = md,
totalTime = time
});
context.Items[KEY] = null;
}
}
这代码加上 并且在webserver节点配置之后 居然影响了上面授权代码...
从insert 的日志来看 代码执行了2次 第一次没code 第二次有code 是正常情况.
但是从log(url)来看.. 同样的url 输出了2次..
2018-10-30 14:31:45:3108:https://open.weixin.qq.com/connect/oauth2/authorize...
2018-10-30 14:31:45:6546:https://open.weixin.qq.com/connect/oauth2/authorize...
这个是我之前截取的.. 因为这个code有一次有效 所以他又请求了腾讯接口一次 第一次就失效了..
然后我就获取不到openid了...
一旦进行使用"过滤器". 那么这代码就失效..
如果注视掉的话.. 就没问题....
所以问题在哪呢?
----------------------------------------------分割线2018年10月30日 17:52:32------------------------------------
经过我几次的测试.我发现了..在end_request方法里面..
如果啥都不写.. 正常
然后我一行一行测试..
发现 居然是执行sql的那句话有问题..
只要执行insert语句. 那么就会执行2次上面的代码..
如果//. 就是正常的.
敢问. 我执行sql 跟他们有关系吗?
public static int Execute(string sql, object paramObj = null)
{
using (var Conn = DbHelperMySQL.GetCon())
{
return Conn.Execute(sql, paramObj);
}
}
就用了dapper 没别的东西 为什么会影响呢?
...全文
请发表友善的回复…
发表回复