Magicodes.IE.AspNetCore之一行代码多格式导出
主要步驟
1.安裝包
Install-Package Magicodes.IE.AspNetCore2.開始配置
在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>
總結
以上是生活随笔為你收集整理的Magicodes.IE.AspNetCore之一行代码多格式导出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 等待十年,史上第一个 64 位版 Vis
- 下一篇: NET问答: 如何避免在 EmptyEn