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