axios封裝以及異常攔截器


  1 import axios from 'axios';
  2 import {
  3     Message
  4 } from 'element-ui';
  5 import qs from 'qs';
  6 import router from '@/router'
  7 
  8 
  9 axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
 10 axios.defaults.withCredentials = true; //請求帶上cookie,解決跨域問題
 11 
 12 
 13 // 請求攔截器
 14 axios.interceptors.request.use(function(config) {
 15     return config
 16 }, function(error) {
 17     return Promise.reject(error)
 18 })
 19 
 20 //http response 攔截器
 21 axios.interceptors.response.use(
 22     response => {
 23         if (response.data.errCode == 2) {
 24             router.push({
 25                 path: "/"
 26             })
 27         }
 28         return response;
 29     },
 30     error => {
 31         if (error.response) {
 32             if (error.response.status == 500) {
 33                 if (error.response.data.code == 401) {
 34                     //session丟失,請重新登錄
 35                     router.push({
 36                         path: "/"
 37                     })
 38                 } else {
 39                     router.push({
 40                         path: '/500'
 41                     });
 42                 }
 43             }
 44         }
 45 
 46         return Promise.reject(error)
 47     }
 48 )
 49 
 50 
 51 /**
 52  * 封裝get方法
 53  * @param url
 54  * @param data
 55  * @returns {Promise}
 56  */
 57 
 58 export function fetch(url, params = {}) {
 59     url = axios.defaults.baseURL + url;
 60     return new Promise((resolve, reject) => {
 61         axios.get(url, {
 62                 params: params
 63             })
 64             .then(response => {
 65                 resolve(response.data);
 66             })
 67             .catch(err => {
 68                 reject(err)
 69             })
 70         // axios.get(url, qs.stringify(params))
 71         //     .then(response => {
 72         //         resolve(response.data);
 73         //     })
 74         //     .catch(err => {
 75         //         reject(err)
 76         //     })
 77     })
 78 }
 79 
 80 
 81 /**
 82  * 封裝post請求
 83  * @param url
 84  * @param data
 85  * @returns {Promise}
 86  */
 87 
 88 export function post(url, data = {}) {
 89     url = axios.defaults.baseURL + url;
 90     return new Promise((resolve, reject) => {
 91         axios.post(url, qs.stringify(data))
 92             .then(response => {
 93                 resolve(response.data);
 94             }, err => {
 95                 reject(err)
 96             })
 97     })
 98 }
 99 
100 /**
101  * 封裝patch請求
102  * @param url
103  * @param data
104  * @returns {Promise}
105  */
106 
107 export function patch(url, data = {}) {
108     url = axios.defaults.baseURL + url;
109     return new Promise((resolve, reject) => {
110         axios.patch(url, data)
111             .then(response => {
112                 resolve(response.data);
113             }, err => {
114                 reject(err)
115             })
116     })
117 }
118 
119 /**
120  * 封裝put請求
121  * @param url
122  * @param data
123  * @returns {Promise}
124  */
125 
126 export function put(url, data = {}) {
127     url = axios.defaults.baseURL + url;
128     return new Promise((resolve, reject) => {
129         axios.put(url, data)
130             .then(response => {
131                 resolve(response.data);
132             }, err => {
133                 reject(err)
134             })
135     })
136 }

請求的后台webapi 過濾器 捕捉session丟失的401錯誤

 1  public override void OnActionExecuting(HttpActionContext filterContext)
 2         {
 3             base.OnActionExecuting(filterContext);
 4             string controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
 5             string actionName = filterContext.ActionDescriptor.ActionName;
 6             string methodType = filterContext.Request.Method.Method;
 7             //獲取全部自定義的注解
 8             var methodCustomAttributes = ((System.Web.Http.Controllers.ReflectedHttpActionDescriptor)filterContext.ActionDescriptor).MethodInfo.GetCustomAttributes(true).ToList();
 9             var desAttribute = methodCustomAttributes.FirstOrDefault(ee => ee is DescriptionNameAttribute);//篩選注解信息
10             string des = string.Empty;
11             if (desAttribute != null)
12             {
13                 var desAtt = desAttribute as DescriptionNameAttribute; //轉換為特定的DescriptionNameAttribute
14                 des = desAtt.DescriptionName;//獲取方法描述信息
15             }
16             SysLogBll logBll = new SysLogBll();
17             SysUser curUser = new SysUser();
18             var cookie = HttpContext.Current.Request.Cookies["sessionid"];
19             if (cookie != null)
20             {
21                 var session = HttpContext.Current.Session[cookie.Value];
22                 if (session != null)
23                 {
24                     curUser = (SysUser)session;
25                     if (methodType != "GET")
26                     {
27                         DateTime curDate = DateTime.Now;
28                         string curName = curUser != null ? curUser.UserName : "";
29                         logBll.Add(new SysLog
30                         {
31                             UserId = curUser.UserId != null ? curUser.UserId : "0",
32                             OperationTime = curDate,
33                             Content = des,
34                             IPAdress = CommonUtil.GetIpAddress(HttpContext.Current.Request),
35                             BrowserVersion = HttpContext.Current.Request.Browser.Browser + " " + HttpContext.Current.Request.Browser.Version
36                         });
37                     }
38                 }
39                 else
40                 {
41                     if (actionName != "LogOn")
42                     {
43                         filterContext.Response = filterContext.Request.CreateResponse(HttpStatusCode.InternalServerError, new
44                         {
45                             code = "401",
46                             message = "session丟失,請重新登錄"
47                         });
48                     }
49                 }
50             }
51         }

 插播一條webapi 注解的寫法以及使用:

DescriptionNameAttribute.cs

1  public class DescriptionNameAttribute : Attribute
2     {
3         public string DescriptionName { get; set; }
4         public DescriptionNameAttribute(string name)
5         {
6             this.DescriptionName = name;
7         }
8     }

如何使用:

1  [DescriptionName("登錄")]
2         [HttpPost, Route("Login/LogOn")]
3         public ResultModel LogOn(SysUser userInfo)
4         {           
5             ...
6         }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM