vue, axios, asp.net core, web api, 接收参数

本文介绍如何解决Vue前端应用通过Axios访问ASP.NET Core后端API的问题,包括配置跨域、设置请求头及使用代理服务等内容。

前端用 ant desgin vue 后端用asp.net core 3.1 中间用axios访问后台, 不管怎么着都访问不到
后来才搞明白.

废话少说. 直接上代码. 说点关键的部分.
vue这样写

<script>
import axios from 'axios';
var queryModel ={
	BoCiHao:'123456'
}
// 这个headers 可以不传, 默认就是 application/json
var headers =  {
        headers: { 
          'Content-Type': 'application/json',
        },
      }
      
axios.post('/api/FaHuoTongZhiDan/AjaxLoadData', this.queryModel, headers)
 .then(data => {
     alert('访问成功')
   })
 .catch(function (error) {
  console.log(error);
 });
   
</script>

后台,使用 [FromBody] 读取json参数


    [ApiController]
    [Produces("application/json")]
    [Route("api/[controller]/[action]")]
    public partial class FaHuoTongZhiDanController : ControllerBase
    {
		 [HttpPost]
		public string AjaxLoadData([FromBody]  ChaXunCanShuModel cxmodel )
		{
			// cxmodel.BoCiHao =="123456" 这里收到.的数值就是123456
		}
	}

在这里插入图片描述
传递的是json格式的数据
在这里插入图片描述
Startup.cs 文件,要允许跨域.

 public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            services.AddDbContext<KWJL5.Models.kwjl5Context>();
             
            // services.AddElmah();
            //services.AddElmah<ElmahCore.XmlFileErrorLog>(options => {
            //    options.Path = "/error";
            //    options.CheckPermissionAction = context => context.User.Identity.IsAuthenticated;
            //    options.LogPath = "/errorlog";
            //    //options.FiltersConfig = "elmah.xml";
            //    //options.Filters.Add(new MyFilter());
            //    // options.Notifiers.Add(new ErrorMailNotifier("Email", emailOptions));
            //});

            //允许一个或多个来源可以跨域
            services.AddCors(options =>
            {
                options.AddPolicy("AllowAll",
                    builder =>
                    {
                        builder
                        .AllowAnyOrigin()
                        .AllowAnyMethod()
                        .AllowAnyHeader();
                    });
            });
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            // app.UseHttpsRedirection();

            app.UseRouting();
            app.UseAuthorization();
            // app.UseCors("CustomCorsPolicy");
            app.UseCors("AllowAll"); // 允许跨域
            // app.UseElmah();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });

            // app.UseHttpsRedirection();
            // app.UseMvc();
        }
    }

vue.config.js 中的配置, 在开发环境下要能正常访问到api的后台, 必须得这样配置代理服务.

module.exports = {
    devServer:{
        proxy:{
            '/api/':{
                target:"http://localhost:63558/",
                pathRewrite:{
                    '^/api/':"/api/"
                },
                logLevel:'debug',
                changeOrigin: true, 
                secure: false 
            }
        }
    },  
}
<think> 首先,用户的问题是关于ASP.NET Core Web API与React或Vue结合使用的相关内容。他们询问方法、案例及相关技术资料。我需要基于提供的引用和之前的系统指令来构建回答。 回顾系统级指令: - 所有行内数学表达式必须使用$...$格式,但这里没有数学内容,所以不需要。 - 独立公式用$$...$$,但不适用。 - LaTeX语法正确:同样,不涉及数学。 - 使用中文回答:必须用中文。 - 生成相关问题:在回答末尾生成相关问题。 - 添加引用标识:在引用的段落末尾自然地添加引用标识如[^1]。 提供的引用: - [^1]:关于Visual Studio中用Vue创建ASP.NET Core应用。 - [^2]:关于搭建.net Core WebApiVue Cli框架,包括代码示例。 - [^3]:关于前后端分离和跨域配置。 - [^4]:关于部署ASP.NET Core webapi + vue。 用户的上一次问题和我的回答:用户提到了“ASP.NET Core Web API与React或Vue结合使用”,但之前的对话历史中,用户是基于这些引用提出了类似问题。系统提示说“参考站内引用”,所以我应该基于这些引用构建回答。 用户真正的需求是了解如何结合使用ASP.NET Core Web API与前端框架如React或Vue,包括方法、案例和资料。 结构化回答: 1. **引入**:简述为什么结合使用ASP.NET Core与前端框架。 2. **方法**:描述实现的步骤,参考引用。 3. **案例**:提供基于引用的简单案例或示例。 4. **技术资料**:推荐相关资源。 5. **相关问题**:在末尾生成相关问题。 确保引用标识: - 当引用具体段落时,添加[^1]、[^2]等。 - 引用来自用户提供的文本。 关键点从引用: - [^1]:使用Visual Studio创建ASP.NET Core应用与Vue.js。 - [^2]:示例代码,下载axios,在main.js中引用。 - [^3]:跨域配置的重要性。 - [^4]:部署策略。 用户询问React或Vue,所以我要覆盖两者,但引用主要提到Vue,所以我需平衡。或许强调两者都可以类似实现。 回答结构: - 先解释概念:前后端分离架构。 - 然后具体方法: - 创建ASP.NET Core Web API后端。 - 创建React或Vue前端应用。 - 配置跨域。 - 集成和部署。 - 提供示例代码(基于引用)。 - 生成相关问题。 用中文回答。 最后,添加相关问题。 生成相关问题: - 如:1. 如何处理跨域问题?2. 部署策略?3. 性能优化? 完整回答: - 开头:介绍主题。 - 主体:分步骤解释方法。 - 结尾:总结和生成相关问题。 </think> ### ASP.NET Core Web API与React或Vue结合使用方法、案例及技术资料 ASP.NET Core Web API是一种高性能、跨平台的后端框架,用于构建RESTful API服务;React和Vue则是流行的前端框架,专注于构建交互式用户界面。结合使用它们能实现前后端分离架构,提升开发效率和可维护性。在这种模式下,后端负责数据处理和API提供,前端通过HTTP请求(如Axios)访问API获取数据。下面我将基于您的需求,参考提供的引用内容,详细解释方法、案例及相关技术资料(如React/Vue的集成方法类似,我会以Vue为主,同时提及React)。 #### 一、核心方法 结合ASP.NET Core Web API与前端框架(如Vue或React)的关键在于前后端分离:后端专注于API开发,前端独立构建UI并与后端通信。以下是标准实现步骤(参考引用[1], [2], [3]): 1. **创建ASP.NET Core Web API项目**: - 使用Visual Studio或.NET CLI创建新项目,选择ASP.NET Core Web API模板。确保配置好控制器和路由。 - 示例:定义一个简单的WeatherForecast控制器,返回JSON数据(如引用[2]中的代码)。 ```csharp // 在ASP.NET Core项目中,添加一个API控制器 [ApiController] [Route("[controller]")] public class WeatherController : ControllerBase { [HttpGet] public IActionResult Get() { var data = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; return Ok(data); // 返回JSON数据 } } ``` 这提供了一个基础的API端点,如引用[2]所示[^2]。 2. **创建前端应用(Vue或React)**: - **Vue方法**:使用Vue CLI创建项目(例如 `vue create my-vue-app`),然后在项目中安装Axios库用于HTTP请求(引用[2])。 ```bash # 在Vue项目目录中 npm install axios ``` 在`main.js`中引入Axios并配置全局基础URL: ```javascript import axios from 'axios'; axios.defaults.baseURL = 'https://localhost:5001'; // 指向ASP.NET Core后端地址 Vue.prototype.$http = axios; // 全局使用 ``` 在组件中调用API: ```vue <template> <div> <p v-for="item in weatherData" :key="item">{{ item }}</p> </div> </template> <script> export default { data() { return { weatherData: [] }; }, mounted() { this.$http.get('/weather') // 调用后端API端点 .then(response => { this.weatherData = response.data; }) .catch(error => console.error(error)); } }; </script> ``` 参考引用[2],这展示了Vue前端如何集成AxiosASP.NET Core API[^2]。 - **React方法**:类似地,使用Create React App创建项目(`npx create-react-app my-react-app`),安装Axios(`npm install axios`),然后在组件中调用API。例如: ```javascript import axios from 'axios'; import React, { useEffect, useState } from 'react'; function WeatherComponent() { const [data, setData] = useState([]); useEffect(() => { axios.get('https://localhost:5001/weather') // 后端API地址 .then(response => setData(response.data)) .catch(error => console.log(error)); }, []); return ( <div> {data.map(item => <p key={item}>{item}</p>)} </div> ); } export default WeatherComponent; ``` 使用React时,原理与Vue相同,核心是Axios处理HTTP请求。 3. **配置跨域(CORS)**: - 由于前端和后端运行在不同端口(例如,Vue在`localhost:8080`,ASP.NET Core在`localhost:5001`),必须配置CORS以避免浏览器安全限制。 - 在ASP.NET Core的`Startup.cs`文件中添加CORS策略(参考引用[3]): ```csharp public void ConfigureServices(IServiceCollection services) { services.AddCors(options => // 添加CORS服务 { options.AddPolicy("AllowAll", builder => { builder.AllowAnyOrigin() // 允许任何前端源 .AllowAnyMethod() .AllowAnyHeader(); }); }); services.AddControllers(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseCors("AllowAll"); // 应用CORS策略 // 其他中间件配置 } ``` 这确保了前端应用能安全访问后端API,如引用[3]强调的前后端分离模式[^3]。 4. **部署集成**: - 开发阶段:后端和前端独立运行(例如,ASP.NET Core使用`dotnet run`,Vue使用`npm run serve`),通过代理或CORS处理通信。 - 生产部署:将前端构建的静态文件(如Vue的`dist`文件夹)复制到ASP.NET Core项目中,并配置路由返回`index.html`(参考引用[4]): ```csharp // 在Startup.cs的Configure方法中 app.UseStaticFiles(); // 提供静态文件 app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapFallbackToFile("index.html"); // 所有未匹配路由返回index.html }); ``` 这样,访问后端地址(如`http://localhost:5000`)会自动加载前端应用,Vue框架处理后续路由(引用[4])[^4]。 #### 二、案例示例 基于引用内容,以下是一个简单案例: - **案例描述**:创建一个天气数据展示应用。后端使用ASP.NET Core Web API提供天气数据API(如引用[2]),前端用Vue或React构建UI。 - **实现步骤**: - 后端:在ASP.NET Core中实现`/weather`端点,返回JSON数组。 - 前端:Vue项目使用Axios调用该API,并在页面渲染数据。 - 结果:用户访问前端URL时,显示从后端获取的天气数据。部署时,将Vue构建文件集成到ASP.NET Core静态文件夹中。 - **优势**:前后端分离提高了开发和测试效率,跨域配置确保了安全性。 #### 三、相关技术资料 以下资源可帮助深入学习和实践: - **官方文档**: - ASP.NET Core Web API:[微软官方文档](https://docs.microsoft.com/en-us/aspnet/core/web-api/) - Vue.js:[Vue官方指南](https://vuejs.org/guide/) - React:[React官方文档](https://reactjs.org/docs/getting-started.html) - Axios:[Axios GitHub仓库](https://github.com/axios/axios)(用于HTTP请求)。 - **教程与博客**: - Visual Studio中使用VueASP.NET Core(参考引用[1]):详细步骤见[微软Learn教程](https://learn.microsoft.com/en-us/visualstudio/javascript/tutorial-asp-net-core-with-vue?view=vs-2022)[^1]。 - CORS配置指南:基于引用[3],可以参考[ASP.NET Core跨域官方文档](https://docs.microsoft.com/en-us/aspnet/core/security/cors)[^3]。 - 部署策略:引用[4]提到的基础部署方法,扩展阅读见[ASP.NET Core静态文件托管](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/static-files)。 - **开源项目示例**: - Vue + ASP.NET Core:GitHub上的[示例仓库](https://github.com/dotnet-architecture/eShopOnWeb)(微软eShop示例)。 - React + ASP.NET Core:[React.NET模板项目](https://github.com/aspnet/JavaScriptServices/tree/master/templates/ReactReduxSpa)。 - **书籍推荐**: - 《ASP.NET Core in Action》 by Andrew Lock(涵盖Web API开发)。 - 《Vue.js权威指南》或《React学习手册》 by Robin Wieruch(前端框架深入)。 通过以上方法,您可以高效结合ASP.NET Core Web API与React或Vue,构建现代化Web应用。核心是确保前后端独立开发、通过API通信,并妥善处理跨域和部署问题[^1][^2][^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值