.Net Core WebApi+Vue实现文件下载

本文展示了如何结合.NetCoreWebApi和Vue.js实现文件下载功能。WebApi控制器利用OfficeOpenXml库创建Excel文件,填充数据并返回。Vue部分通过axios发送POST请求,接收到文件流后转换为Blob对象,利用a标签的download属性实现下载。

.Net Core WebApi+Vue实现文件下载

WebApi 控制器代码实例

using OfficeOpenXml;引用的程序集

 [HttpPost]
        public async Task<IActionResult> AcceptanceExportDate(AcceptanceEntryRequest input)
        {
            List<AcceptanceEntryResponse> exports = await _acceptanceEntryBusiness.AcceptanceExport(input);//获取到你所要下载数据,我这里调用查询接口
            using var package = new ExcelPackage();
            ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("信息表");
            List<string> titles = new List<string>
            {
                "客户公司",
                "销售公司",
            };//标题
            for (int i = 0; i < titles.Count; i++)
            {
                worksheet.Cells[1, i + 1].Value = titles[i];
            }
            int row = 2, col = 0;
            //内容
            for (int i = 0; i < exports.Count; i++)
            {
                var Accptance = exports[i];
                col = titles.IndexOf("客户公司") + 1; SetValue(worksheet, row, col, row, col, Accptance.CompanyName);
                col = titles.IndexOf("销售公司") + 1; SetValue(worksheet, row, col, row, col, Accptance.SaleCompanyName);
                row++;
            }
             var excelData = package.GetAsByteArray();
            var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            var fileName = "信息表.xlsx";
            return File(excelData, contentType, fileName);
        }
        
        public void SetValue(ExcelWorksheet worksheet, int row, int col, int endRow, int endCol, string text)
        {
            var range = worksheet.Cells[row, col, endRow, endCol];
            range.Merge = true;
            range.Value = text;
        }

Vue代码实例

this.queryParam是你的查询条件

 <a-button type="primary" @click="AcceptanceExport">导出</a-button>

AcceptanceExport () {
  this.loading = true
  this.$http
    .post('/EShop/AcceptanceEntry/AcceptanceExportDate', this.queryParam, { responseType: 'blob' })
    .then((resJson) => {
      this.loading = false
        const blob = new Blob([resJson])
        const fileName = '信息表.xls'
        if ('download' in document.createElement('a')) {
          // 非IE下载
          const elink = document.createElement('a')
          elink.download = fileName
          elink.style.display = 'none'
          elink.href = URL.createObjectURL(blob)
          elink.setAttribute('download', '信息表.xlsx')
          document.body.appendChild(elink)
          elink.click()
          URL.revokeObjectURL(elink.href) // 释放URL 对象
          document.body.removeChild(elink)
        } else {
          // IE10+下载
          navigator.msSaveBlob(blob, fileName)
        }
    })
}
<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前端如何集成Axios与ASP.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中使用Vue与ASP.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]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值