解决asp.net mvc跨域问题

跨域浏览器会报错

 

 如何解决?

1、前端

 添加共用common.js

  1 import axios from 'axios'
  2 let querystring = require('querystring')
  3 let token = '';
  4 axios.defaults.baseURL = 'http://10.182.29.94:8154/fpcfcs/api'
  5 axios.defaults.timeout = 600000//超时时长,单位毫秒
  6 axios.defaults.withCredentials = false//携带cookie
  7 axios.defaults.headers.common['Token'] = token;
  8 //axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8';//配置请求头 
  9 axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';//配置请求头 
 10 
 11 
 12 export function GetBaseURL() {
 13     return axios.defaults.baseURL;
 14 }
 15 
 16 //添加一个请求拦截器
 17 axios.interceptors.request.use(function (config) {
 18    // token = window.sessionStorage.getItem('Token');
 19    token = getCookie("Token");
 20     config.headers.common['Token'] = token;
 21     console.dir(config);
 22     return config;
 23   }, function (error) {
 24     // Do something with request error
 25     console.info("error: ");
 26     console.info(error);
 27     return Promise.reject(error);
 28   });
 29 
 30   // 添加一个响应拦截器
 31 /* axios.interceptors.response.use(function (response) {
 32     console.log(response)
 33     if (response.data && response.data.Result) {
 34       if (response.data.Result=="1" ) {
 35         //未登录
 36        // response.data.Msg = "登录信息已失效,请重新登录";
 37        // alert(response.data.Msg);
 38         //routerIndex.push('/login'); 跳转登录页
 39       }
 40       if (parseInt(response.data.Result) === 0) {
 41         alert(response.data.Msg);
 42       }
 43     }
 44     return response;
 45   }, function (error) {
 46     //做一些响应错误的事情
 47     console.log(error);
 48     alert("服务器连接失败");
 49     return Promise.reject(error);
 50   }) */
 51 
 52 //get请求
 53 export function get(url, data = {}) {
 54     return axios.get(url, { params: data })
 55 }
 56 //post请求
 57 export function post(url, data = {}) {
 58     return axios.post(url, querystring.stringify(data))
 59 }
 60 //post请求
 61 export function postWithJson(url, data = {}) {
 62     return axios.post(url, data)
 63 }
 64 //post form参数请求
 65 export function form(url, data = {}) {
 66     return axios.post(url,
 67         querystring.stringify(data),
 68         {
 69             headers: {
 70                 'Content-Type': 'application/x-www-form-urlencode'
 71             }
 72         })
 73 }
 74 //下载文件
 75 export function download(url, data = {}) {
 76     axios
 77         .post(url, data, { responseType: 'blob' })
 78         .then(function (response) {
 79             //服务器端要在header设置Access-Control-Expose-Headers:Content-Disposition
 80             //前端才能正常获取Content-Disposition内容
 81             const disposition = response.headers['content-disposition']
 82             let fileName = disposition.substring(disposition.indexOf("filename*=UTF-8") + 17, disposition.length);
 83             //iso8859-2的字符转换成中文
 84             fileName = decodeURI(escape(fileName));
 85             var blob = new Blob([response.data])
 86             var downloadElement = document.createElement('a');
 87             var href = window.URL.createObjectURL(blob); //创建下载的链接
 88             downloadElement.href = href;
 89             downloadElement.download = fileName; //下载后文件名
 90             document.body.appendChild(downloadElement);
 91             downloadElement.click(); //点击下载
 92             document.body.removeChild(downloadElement); //下载完成移除元素
 93             window.URL.revokeObjectURL(href); //释放掉blob对象
 94         })
 95         .catch(function (error) {
 96             alert("下载发送错误,错误信息:" + error)
 97         });
 98 }
 99 
100 //时间戳转日期格式,格式为2014-06-18 10:33:24
101 export function timestampToTime(timestamp) {
102     //var date = new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
103     var date = new Date(timestamp);
104     var Y = date.getFullYear() + '-';
105     var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
106     var D = date.getDate() + ' ';
107     var h = date.getHours() + ':';
108     var m = date.getMinutes() + ':';
109     var s = date.getSeconds();
110     return Y + M + D + h + m + s;
111 }
112 function getCookie(name) {
113     /// <summary>获取Cookie</summary>
114     /// <param name="name" type="string">Cookie的名称</param>
115     /// <returns type="object" />
116 
117     var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));
118     if (arr != null) return unescape(arr[2]); return null;
119 }

前端使用

1 import { post, download } from "../Scripts/Common";
2 
3  post("/BasicInfo/GetLeiBie").then((res) => {
4         query.CATEGORYS = res.data.Data;
5       });

 

 

2.修改asp.net mvc项目中web.config文件
 
在system.webServer节添加

<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Headers" value="Content-Type,Accept,X-Requested-With,Token"/>
<add name="Access-Control-Allow-Methods" value="GET,POST,OPTIONS"/>
<add name="Access-Control-Allow-Origin" value="*"/>
</customHeaders>
</httpProtocol>

 
posted @ 2021-11-26 10:20  v流年v  阅读(626)  评论(0)    收藏  举报