1、net core web api 后端
1 /// <summary> 2 /// 圖形驗證碼 3 /// </summary> 4 [HttpGet] 5 public IActionResult ValidateCode1() 6 { 7 string code = ""; 8 string yzm_id = "YZM_TOKEN_" + Guid.NewGuid().ToString(); 9 System.IO.MemoryStream ms = YZM1.Create(out code);//生成驗證碼圖片流 10 HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "YZM_TOKEN"); 11 HttpContext.Response.Headers.Add("YZM_TOKEN", yzm_id);//驗證碼token 放入headers頭 12 HttpContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");//允許跨域 13 CacheService.Add(yzm_id, code, DateTime.Now.AddMinutes(1) - DateTime.Now);//放入緩存有效期1分鍾 14 return File(ms.ToArray(), @"image/png"); 15 }
注意:
HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "YZM_TOKEN"); 必須添加 不然跨域前端 js 獲取不到
設置允許跨域
HttpContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");//允許跨域
2、前端獲取綁定 到 img 標簽
使用axios 插件
安裝
1、 利用npm安裝npm install axios --save
2、 利用bower安裝bower install axios --save
3、 直接利用cdn引入<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
1 <div id="codeNum"> 2 <img id="codeNum1" src="" alt="驗證碼"> 3 <input type="hidden" id="yzm_token"> 4 </div>
1 //驗證碼 2 function generatedCode() { 3 axios.get('https://localhost:44357/api/YZM', { responseType: 'blob' }).then 4 ( 5 function (response) { 6 var blob = response.data; 7 var img = document.getElementById("codeNum1"); 8 document.getElementById("yzm_token").value = response.headers.yzm_token; 9 img.onload = function (e) { 10 window.URL.revokeObjectURL(img.src); 11 }; 12 img.src = window.URL.createObjectURL(blob); 13 } 14 );
原生態自己寫:
1 function generatedCode1(){ 2 var xmlhttp; 3 xmlhttp = new XMLHttpRequest(); 4 xmlhttp.open("GET", "https://localhost:44357/api/YZM", true); 5 xmlhttp.responseType = "blob"; 6 xmlhttp.onload = function () { 7 if (this.status == 200) { 8 var blob = this.response; 9 var img = document.getElementById("codeNum1"); 10 document.getElementById("yzm_token").value = this.getResponseHeader("yzm_token"); 11 img.onload = function (e) { 12 window.URL.revokeObjectURL(img.src); 13 }; 14 img.src = window.URL.createObjectURL(blob); 15 } 16 } 17 xmlhttp.send(); 18 }