Magicodes.IE.AspNetCore之一行代码多格式导出

主要步骤


1.安装包

Install-Package Magicodes.IE.AspNetCore


2.开始配置

在Startup.cs的Configure()方法中,在UseRouting()中间件之后,注册如下中间件

public void Configure(IApplicationBuilder app)
{app.UseRouting();app.UseMagiCodesIE();app.UseEndpoints(endpoints =>{endpoints.MapControllers();});
}

上面这种以中间件形式可以为我们提供导出服务,那么我们再看一下另一种方式如下所示:

  public void ConfigureServices(IServiceCollection services){services.AddControllers(options=>options.Filters.Add(typeof(MagicodesFilter)));}

上面两种方式都可以为我们提供导出服务,我们只需要对我们的控制器进行配置我们的特性,在这边呢 特性主要做的是一个标识作用,标识他的一些相关的内容数据,同时标识他可以当成文件导出。

[HttpGet("excel")]
[Magicodes(Type = typeof(ExportTestDataWithAttrs))]
public List<ExportTestDataWithAttrs> Excel()
{return GenFu.GenFu.ListOf<ExportTestDataWithAttrs>(100);
}

上面代码片段中我们标识这个类允许被导出。同时我们需要通过Type指定我们被导出类的类型。

这样填写完后我们可以通过对该地址的调用,但是注意我们必须要添加请求头以标识被导出的文件类型。如果不添加请求头,那么此处将返回的还是json格式的数据。请求头名称为Magicodes-Type

       /// <summary>///     XLSX/// </summary>internal const string XLSXHttpContentMediaType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";/// <summary>///     PDF/// </summary>internal const string PDFHttpContentMediaType = "application/pdf";/// <summary>///     DOCX/// </summary>internal const string DOCXHttpContentMediaType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";/// <summary>///     HTML/// </summary>internal const string HTMLHttpContentMediaType = "text/html";

如果说是模板导出word或者pdf甚至说html文件那么我们也是同样的操作如下所示:

[HttpGet("Word")][Magicodes(Type = typeof(ReceiptInfo), TemplatePath = ".//ExportTemplates//receipt.cshtml")]public ReceiptInfo Word(){return new ReceiptInfo{Amount = 22939.43M,Grade = "2019秋",IdNo = "43062619890622xxxx",Name = "张三",Payee = "湖南心莱信息科技有限公司",PaymentMethod = "微信支付",Profession = "运动训练",Remark = "学费",TradeStatus = "已完成",TradeTime = DateTime.Now,UppercaseAmount = "贰万贰仟玖佰叁拾玖圆肆角叁分",Code = "19071800001"};}

我们还是需要对其指定Type,然后通过TemplatePath进行指定模板地址即可

同样的我们还可以通过请求头进行标识本次请求是否是文件格式导出。

       [HttpGet("pdf")][Magicodes(Type = typeof(BatchPortraitReceiptInfoInput), TemplatePath = ".//ExportTemplates//batchReceipt.cshtml")]public BatchPortraitReceiptInfoInput Pdf(){var input = new BatchPortraitReceiptInfoInput{Payee = "湖南心莱信息科技有限公司",SealUrl =@"data:image/jpeg;base64....",LogoUrl =@"data:image/png;base64....",ReceiptInfoInputs = new List<BatchPortraitReceiptInfoDto>()};for (var i = 0; i < 500; i++)input.ReceiptInfoInputs.Add(new BatchPortraitReceiptInfoDto{Amount = 22939.43M,Grade = "2019秋",IdNo = "43062619890622xxxx",Name = "张三",PaymentMethod = "微信支付",Profession = "运动训练",Remark = "学费",TradeStatus = "已完成",TradeTime = DateTime.Now,UppercaseAmount = "贰万贰仟玖佰叁拾玖圆肆角叁分",Code = "1907180000" + i});return input;}[HttpGet("Html")][Magicodes(Type = typeof(ReceiptInfo), TemplatePath = ".//ExportTemplates//receipt.cshtml")]public ReceiptInfo Html(){return new ReceiptInfo{Amount = 22939.43M,Grade = "2019秋",IdNo = "43062619890622xxxx",Name = "张三",Payee = "湖南心莱信息科技有限公司",PaymentMethod = "微信支付",Profession = "运动训练",Remark = "学费",TradeStatus = "已完成",TradeTime = DateTime.Now,UppercaseAmount = "贰万贰仟玖佰叁拾玖圆肆角叁分",Code = "19071800001"};}


Swagger中使用


通过继承IOperationFilter接口,创建AddRequiredHeaderParameter类,添加一个header类型的参数,并且Header Name为Magicodes-Type如下所示:

 public class AddRequiredHeaderParameter : IOperationFilter{public void Apply(OpenApiOperation operation, OperationFilterContext context){if (operation.Parameters == null){operation.Parameters = new List<OpenApiParameter>();}operation.Parameters.Add(new OpenApiParameter{Name = "Magicodes-Type",In = ParameterLocation.Header,Required = false,Description = "根据HttpContentMediaType添加指定的header值,导出不同格式的文件。"});}}

然后转到ConfigureServices()方法中,在AddSwaggerGen方法中添加如下内容:

  c.OperationFilter<AddRequiredHeaderParameter>();


Reference

https://github.com/dotnetcore/Magicodes.IE

转载是一种动力 分享是一种美德

如果喜欢作者的文章,请关注【麦扣聊技术】订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

文档官网:docs.xin-lai.com

原文作者:【HueiFeng】

QQ群:

编程交流群<85318032> 

产品交流群<897857351>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

想不到吧,这些都能用R!

R作为一种统计分析软件&#xff0c;广泛应用于生物、医学、电商、新闻等数据相关行业&#xff0c;是目前主流数据应用软件之一。那么&#xff0c;R到底有哪些特别之处呢?实际上&#xff0c;R是统计领域广泛使用的S语言的一个分支&#xff0c;两者在程序语法上几乎一样&#xf…

ssd windows未能启动服务器,ssd安装win10无法启动你安装方法对吗?来看一下

固态硬盘虽然价格偏高&#xff0c;但是读写速度快&#xff0c;很多人只追求速度&#xff0c;纷纷买了全新固态硬盘安装系统&#xff0c;现在最新的系统是win10&#xff0c;如果在uefi电脑上用固态硬盘安装win10&#xff0c;那么速度将有质的提升&#xff0c;那么全新固态硬盘怎…

一名IT经理是如何把项目带崩的。。。

我是一名项目经理&#xff0c;在过去的四个月里&#xff0c;我把一个项目带崩了&#xff08;上线后频出问题&#xff0c;用户无法使用&#xff09;。在最近的几天&#xff0c;我每天都在反思自己&#xff0c;我都在问自己以下几个问题&#xff1a;1.我做错了什么&#xff1f;2.…

C# 线程池ThreadPool用法简介

前言&#xff1a;自从task出现后&#xff0c;threadpool地位直线下降&#xff0c;但是一些老的程序员用惯了threadpool&#xff0c;我们在继承开发的时候也会时常看到这个用法&#xff0c;所以我们也很有必要熟悉认识它。什么是线程池&#xff1f;为什么要用线程池&#xff1f;…

10分钟采集凡客最新的省、市、区、邮政编码和电话区号(附源码)

最近的开发的项目需要用到省、市、区数据&#xff0c;因为要开发的项目也是电子商务网站&#xff0c;在参考凡客的用户体验时&#xff0c;发现它连深圳最新分离出来的光明新区都有了&#xff0c;拍拍网都没有更新数据&#xff0c;看来凡客在数据更新方面还是挺负责的&#xff0…

刘强东在美国出事了,老老实实的IT男,真的是有钱就变坏吗?

9月2日&#xff0c;网络上流传京东集团创始人刘强东在美国明尼苏达州&#xff0c;涉嫌性侵女大学生&#xff0c;目前已经被保释的消息。刘强东的相关信息&#xff0c;是可以直接在明尼苏达州Hennepin郡治安官办公室的监狱名单上查到的。上图中&#xff0c;可以看到指控描述为cr…

记一次 .NET游戏站程序的 CPU 爆高分析

一&#xff1a;背景 1. 讲故事上个月有个老朋友找到我&#xff0c;说他的站点晚高峰 CPU 会突然爆高&#xff0c;发了两份 dump 文件过来&#xff0c;如下图&#xff1a;又是经典的 CPU 爆高问题&#xff0c;到目前为止&#xff0c;对这种我还是有一些经验可循的。抓 2-3 个 du…

干货 | 数据挖掘过关40题

今天为大家准备了40道数据挖掘的题&#xff0c;试试你的能力吧&#xff01;答案请见文末1.某超市研究销售纪录数据后发现&#xff0c;买啤酒的人很大概率也会购买尿布&#xff0c;这种属于数据挖掘的哪类问题&#xff1f;A.关联规则发现B.聚类C.分类D.自然语言处理2.以下两种描…

.Net程序内存泄漏解析

↑↑↑ 点击左上角蓝字关注我&#xff0c;为您提供技术新动态。本期内容分享实战中内存泄漏解决思路。Part1 初步分析原因Part2 查找内存泄漏的根本原因Part2.1 解决方案Part3 总结Part4 彩蛋一、概要大概在今年三月份的时候突然被紧急调到另外一个项目组解决线上内存泄漏问题。…

js 上下箭头滚动_JS中的this完全讲解,再也不会被this搞晕了

关于This对象js 中的this 是一个比较难理解的对象&#xff1b;所以也经常作为面试的考点&#xff0c;考察应聘者的js 基础能力&#xff1b;其实this的指向也就那么几种情况&#xff0c;接下来我们一一看一下&#xff1a;函数中的this取何值是在函数真正被调用时确定的(也就是运…

9张图,Kafka为什么要放弃Zookeeper

最近&#xff0c;confluent社区发表了一篇文章&#xff0c;主要讲述了Kafka未来的2.8版本将要放弃Zookeeper&#xff0c;这对于Kafka用户来说&#xff0c;是一个重要的改进。之前部署Kafka就必须得部署Zookeeper&#xff0c;而之后就只要单独部署Kafka就行了。[1]1.Kafka简介Ap…

Python能用来做什么?以下是Python的三大主要用途

如果你想学Python&#xff0c;或者你刚开始学习Python&#xff0c;那么你可能会问&#xff1a;“我能用Python做什么&#xff1f;”这个问题不好回答&#xff0c;因为Python有很多用途。但是随着时间&#xff0c;我发现有Python主要有以下三大主要应用&#xff1a; Web开发 数据…

qbuttongroup如何都不选中_全程马拉松,半程马拉松该如何跑?很多人都不知道这些细节...

现在已经到12月份了&#xff0c;全国各地的马拉松也接近尾声&#xff0c;回想自己这一年参加了多少次全程马拉松或半程马拉松&#xff1f;很多人跑步最初的宗旨是为了减肥、为了健康&#xff0c;为了让自己拥有一个好身体&#xff0c;可是不知不觉中在朋友又或自己的兴趣中“投…

通过Dapr实现一个简单的基于.net的微服务电商系统(五)——一步一步教你如何撸Dapr之状态管理...

状态管理和上一章的订阅发布都算是Dapr相较于其他服务网格框架来讲提供的比较特异性的内容&#xff0c;今天我们来讲讲状态管理。目录&#xff1a;一、通过Dapr实现一个简单的基于.net的微服务电商系统二、通过Dapr实现一个简单的基于.net的微服务电商系统(二)——通讯框架讲解…

过Div将页面分三块(上,中,下),然后通过Ext来改变Content的内容(三)--终结版

2019独角兽企业重金招聘Python工程师标准>>> 这几天的页面重构终于快要结束了。 最终页面架构选择了Sitemesh&#xff0c;经过昨天下午及今天上午的调试终于把Sitemesh下css、js问题解决了。 使用Sitemesh总结以下几点&#xff1a; 1、<decorator:head />放在…

Python+人工智能的超强组合,再不学就跟不上时代啦!

《Python人工智能》原价 899.00 现超 410 人参团仅售 199.00 点击文末阅读原文立即参团参团&#xff0c;咨询&#xff0c;查看课程&#xff0c;请点击【阅读原文】↓↓↓

如何证明服从卡方分布_谈谈抽样分布定理

各位阿娜答&#xff0c;这个月就更新了一篇文章&#xff0c;这都月底了&#xff0c;还有两次自荐机会没用&#xff0c;所以最后这几天要更两篇文章&#xff0c;大家敬请期待&#xff01;明明是夏天&#xff0c;但却是个多事之秋啊~(ง •_•)ง2020年注定是不平凡的一年&#x…

C#中ManualResetEvent用法简介

简单介绍多个线程可以通过调用ManualResetEvent对象的WaitOne方法进入等待或阻塞状态。当控制线程调用Set()方法&#xff0c;所有等待线程将恢复并继续执行。ManualResetEvent是如何工作的在内存中保持着一个bool值&#xff0c;如果bool值为False&#xff0c;则使所有线程阻塞&…

anaconda和python有什么不一样_黄山毛峰的味道为什么会不一样?

黄山毛峰&#xff0c;最早为人所熟知的黄山名茶&#xff0c;最经典的绿茶&#xff0c;特别是那种清香清爽的味道&#xff0c;很受茶友的喜爱。这两年经常接到茶友的电话问&#xff0c;为什么之次每次买的黄山毛峰都不一样&#xff0c;在不同的茶叶店&#xff0c;买的味道都不一…

Newbe.Claptrap 0.10.2 发布,Blazor 演示

Newbe.Claptrap 0.10.2 发布&#xff0c;我们为项目模板引入了 Minion 以及 Blazor 制作的交互界面。更新内容 类库常规升级升级了相关的所有类库至最新版本。包括 Dapr SDK 1.1 等等。项目模板增强现在&#xff0c;我们为最新的项目模板引入了 Minion 以演示如何使用 Minion 处…