1. 程式人生 > 實用技巧 >.net core 攔截API呼叫判斷引數

.net core 攔截API呼叫判斷引數

因為需要判斷票據是否超時的,超時的話則返回登入頁。

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方法:

        [Route("GotoHome")]
        [HttpPost]
        public object GotoHome() {
            return new {State=false,ErrorCode=1001,Message="登入超時",GotoUrl= ServiceConfigurationHelper.GetServerValue("Comp") };
        }

  

修改jquery.js的回撥方法:

		return jQuery.ajax( jQuery.extend( {
			url: url,
			type: method,
			dataType: type,
			data: data,
			success: function (data) {
//如果返回的引數滿足所有條件,則代表是登入超時。 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 ) );