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 }