1. 程式人生 > 實用技巧 >axios封裝以及異常攔截器

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         }