飞道的博客

解决core3.0跨域请求问题:【Error: Network Error at createError (createError.js?2d83:16)】前后端分离Vue的使用

6677人阅读  评论(0)

问题描述

最近试着用vue+axios来搭建前端,实现前后端分离,后端采用asp.net coe mvc 架构,在前端axios调用后端接口时,出现了跨域请求的错误问题,经过一番查找,最终成功实现了跨域请求,迈出了前后端分离的第一步。跨域问题浏览器报错的日志如下:

Error: Network Error
at createError (createError.js?2d83:16)
at XMLHttpRequest.handleError (xhr.js?b50d:84)

刚开始在后端加入了断点,前端运行后,是可以走到后端接口中的断点里,前端的参数也可以传到后端中,所以我总觉得不是后端的问题,但是后来试了很多方法后,还是同样的报错信息,我尝试着在后端中加入解决跨域请求的配置后,问题就没有了,前端成功调用后端接口,实现了跨域请求。
因此记录一下在asp.net core3.0中如何实现跨域请求的问题。
我遇到的基本情况就是这样。废话不多说,下面记录了如何解决core3.0的跨域请求配置。

解决方法

  1. 在Startup.cs中的ConfigureServices中加入以下代码:
     public void ConfigureServices(IServiceCollection services)
     {
   
         //在configservices中增加注册以下服务
         //配置跨域处理   可以多配置Policy,应对不同的访问域
         //以下代码是往自己项目中添加的内容
         services.AddCors(options =>
         {
   
             options.AddPolicy("any", builder =>
             {
   
                 builder.AllowAnyOrigin() //允许任何来源的主机访问
                 //builder.WithOrigins("localhost:5000")//设置允许访问的域


                 .AllowAnyMethod()

                 .AllowAnyHeader()

                 .AllowCredentials();//

             });

         });
     }
  1. 在Startup.cs中的Configure中粘贴以下代码:
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
   
            if (env.IsDevelopment())
            {
   
                app.UseDeveloperExceptionPage();
            }
            else
            {
   
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }
            //以下代码是往自己项目中添加的内容
            //其中“any” 是对应上面service里的’options.AddPolicy("any", builder =>‘ 中的 any
            app.UseCors("any");//这样就使用到全局了。
        }

扩展

axios在传参时,后端代码接收不到参数的可能原因有如下
参考链接:https://segmentfault.com/a/1190000012635783
https://segmentfault.com/a/1190000015261229
我是通过引用qs这种方案进行解决的

import qs from ‘qs’
data: qs.stringify(data)

具体使用代码如下:

/*
 * 用户相关请求模块
 */
import qs from 'qs'
import request from '@/utils/request'
// 用户登录
export const login = data => {
   
  console.log(qs.stringify(data))
  return request({
   
    method: 'POST',
    url: 'StudentAccount/Login',
    // data 用来设置 POST 请求体
    // data: data  // 同名时可以简写
    data: qs.stringify(data)
  })
}

需要注意的是:后端在接受参数时,需要与前端传递参数的字段同名,就会自动得到对应字段的值:
我前段传递的参数结构是这样的

mobile=13911111111&code=246810&Account=15735659622&Password=112233&LoginType=Phone&agree=true

Json格式是这样的

例如我的后端接收参数是这样写的:

public JsonResult Login(string mobile,string Account,string Password,string LoginType)
{
   
	//功能逻辑代码实现
}

后端对应的变量名,就取到了前端对应属性的值,就此.net core+vue+axios前后端跨域post请求传参结束。

如上有什么问题,欢迎大家批评指正。


转载:https://blog.csdn.net/weixin_40359716/article/details/109528204
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场