<十一>请求 axios

1、vue 发起请求,用的是axios。先安装一下

npm install axios

 2、在main.js中注册全局的axios.

import Vue from 'vue'
import App from './App'
import router from './router'
import store from './store'
import axios from 'axios'

Vue.config.productionTip = false
Vue.prototype.axios = axios
/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  store,
  components: { App },
  template: '<App/>'
})

3、修改12345.vue的界面代码,点击按钮触发api调用

<template>
<div>
 <button @click="changeInfo">点击</button>
  <div class='hello'>{{msg}}</div>
</div>
</template>

<script>
export default {
  name: '12345',
  data () {
    return {
      msg: ''
    }
  },
  methods: {
    changeInfo () {
      this.axios.get('http://localhost:5000/weatherforecast').then(response => {
        this.msg = response
        console.log(response)
      })
    }
  }
}
</script>

4、用.netcore3.1建一个api,默认最简单的api就好了。

 

 5、点击按钮,看下结果,出现了跨域的错误

 

 6、给api添加跨域处理,在startup类中添加跨域处理,app.usecors的位置要在UseAuthorization后面,不然会报错

 public void ConfigureServices(IServiceCollection services)
        {
            
            services.AddControllers();
           // 添加cors 服务 配置跨域处理
            services.AddCors(options =>
            {
                options.AddPolicy("any", builder =>
                {
                    builder.WithMethods("GET", "POST", "HEAD", "PUT", "DELETE", "OPTIONS")
                    .AllowAnyOrigin(); //允许任何来源的主机访问
                });
            });
        }
 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
           
            app.UseRouting();
            app.UseAuthorization();
            app.UseCors("any");
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }

7、重新编译一下,点击按钮,看api返回的数据能否正常显示。

8、上面例子是get调用,下面改造一下使用post

后端新增一个post接口。

  [HttpPost]
        public IEnumerable<WeatherForecast> Post(string Name)
        {
            var rng = new Random();
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = rng.Next(-20, 55),
                Summary = Name+":"+ Summaries[rng.Next(Summaries.Length)]
            })
            .ToArray();
        }

前端换成post

methods: {
    changeInfo () {
      this.axios.post('http://localhost:5000/weatherforecast', {Name: 'Aiden'})
        .then((response) => {
        this.msg = response
        })
        .catch((error) => {
          console.log(error)
        })
      // this.axios.get('http://localhost:5000/weatherforecast').then(response => {
      //   this.msg = response
      //   console.log(response)
      // })
    }
  }
}

重新运行后查看情况

 

 出现上述错误了,原因是请求头没有添加内容的类型。

在post中,指定content-type

 this.axios.post('http://localhost:5000/weatherforecast', {Name: 'Aiden'}, {headers: {'Content-Type': 'application/x-www-form-urlencoded'}})

再点击就可以了。

 

9、将每个调用接口都抽取到相应的js 去,比如获取用户的就放到user.js里,这样更方便维护。这我就不讲了,跟状态管理一样,新建一个api文件夹,然后新建js,引入js。

 

posted @ 2022-01-28 14:44  许轩霖  阅读(42)  评论(0编辑  收藏  举报