js 跨域訪問 獲取驗證碼圖片 獲取header 自定義屬性


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     }

 


免責聲明!

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



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