.net core 拦截API调用判断参数

因为需要判断票据是否超时的,超时的话则返回登录页。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public void Configure((IApplicationBuilder app, IHostingEnvironment env)
        {
//添加一个中间件
  app.Use((context, next) =>
            {
                // context.Response.WriteAsync("this is test");
                var resposeLen = context.Request;
                try
                {
                    //判断方法中是否有ticket参数,如果有则代表该操作需要判断ticket是否有效,过期
                    if (resposeLen.Form.Keys.Contains("ticket"))
                    {
                        string ticket = resposeLen.Form["ticket"].ToString();
                        Guid userGuid;//返回的用户ID
                        string s0;//返回的系统名称
                        DateTime dt;//返回的时间
                        if (TicketRingContext.Parse(ticket, out userGuid, out s0, out dt))
                        {
                            //一但正确获取到了ticket的创建时间及用户信息,则进行下一步的判断
                            int outTime =ServiceConfigurationHelper.GetServerValue("TicketTimeOut") ==null?0:int.Parse(ServiceConfigurationHelper.GetServerValue("TicketTimeOut"));
                            if ((System.DateTime.Now - dt).TotalMinutes > outTime&&outTime!=0)
                            {
                                //超时则改变请求方法,改为登录超时的方法。
                                context.Request.Path = "/api/AlarmInfo/GotoHome";
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    //异常则按照原来的顺序继续执行
                    return next();
                }
                return next();
            });
}  

GotoHome方法:

1
2
3
4
5
[Route("GotoHome")]
[HttpPost]
public object GotoHome() {
    return new {State=false,ErrorCode=1001,Message="登录超时",GotoUrl= ServiceConfigurationHelper.GetServerValue("Comp") };
}

  

修改jquery.js的回调方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    return jQuery.ajax( jQuery.extend( {
        url: url,
        type: method,
        dataType: type,
        data: data,
        success: function (data) {<br>//如果返回的参数满足所有条件,则代表是登录超时。
            if (data.State != undefined && data.State == false && data.ErrorCode != undefined && data.ErrorCode == 1001) {
//判断当前页面是否是子页面(嵌入到Iframe里面的),如果是则提示登录失效,如果不是则直接跳转到首页。
                if (top.location != self.location) {
                //  alert("登录失效,");
                } else {
                    location.href = data.GotoUrl;
                }
             
            }
             callback(data);
        }
    }, jQuery.isPlainObject( url ) && url ) );

  

posted @   厚颜无耻之徒  阅读(471)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示