ASP.NETCoreCSV文本输出格式化程序使用CsvHelper
创始人
2024-09-17 19:30:34
0
  1. 引入CsvHelper包,并在Startup类中注册服务:
    using CsvHelper.Configuration;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.DependencyInjection;
    using System.Collections.Generic;
    using System.Globalization;
    using System.IO;
    using System.Linq;
    
    public class Startup
    {
        //...
        public void ConfigureServices(IServiceCollection services)
        {
            //...
            services.AddMvc().AddMvcOptions(options =>
            {
                options.OutputFormatters.Add(new CsvOutputFormatter());
            });
        }
        //...
    }
    
  2. 创建一个名为CsvOutputFormatter的类,继承自TextOutputFormatter类,并使用CsvHelper库将对象转换为CSV格式:
    public class CsvOutputFormatter : TextOutputFormatter
    {
        private readonly CsvConfiguration _csvConfiguration;
    
        public CsvOutputFormatter()
        {
            SupportedMediaTypes.Add("text/csv");
            SupportedEncodings.Add(Encoding.UTF8);
            _csvConfiguration = new CsvConfiguration(CultureInfo.InvariantCulture)
            {
                Delimiter = ",",
                HasHeaderRecord = true
            };
        }
    
        protected override bool CanWriteType(Type type)
        {
            if (typeof(IEnumerable).IsAssignableFrom(type) && type != typeof(string))
            {
                return true;
            }
            return base.CanWriteType(type);
        }
    
        public override async Task WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding selectedEncoding)
        {
            var response = context.HttpContext.Response;
            
            using (var writer = new StreamWriter(response.Body))
            {
                using (var csv = new CsvWriter(writer, _csvConfiguration))
                {
                    var model = context.Object;
                    var modelType = model.GetType();
    
                    if (typeof(IEnumerable).IsAssignableFrom(modelType))
                    {
                        csv.WriteRecords((IEnumerable)model);
                    }
                    else
                    {
                        csv.WriteRecord(model);
                    }
    
                    await writer.FlushAsync();
                }
            }
        }
    }
    
    
    
  3. 最后通过调用相应的控制器操作来调用CsvOutputFormatter并将CSV转换输出到客户端:
    using Microsoft.AspNetCore.Mvc;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    
    public class HomeController : Controller
    {
        //...
        public IActionResult Csv()
        {
    
  4. 相关内容

    热门资讯

    查到实测"德州圈脚本... 德州圈脚本是一款专注玩家量身打造的游戏记牌类型软件,在德州圈脚本这款游戏中我们可以记录下每张牌的数量...
    透视有挂"潮汕激k辅... 透视有挂"潮汕激k辅助"开挂(脚本)辅助脚本证实有挂-切实教程【无需打开直接搜索加薇13670430...
    透视美元局"微乐游戏... 透视美元局"微乐游戏公众号辅助器"开挂(神器)辅助神器真的有挂-必赢教程;无需打开直接搜索薇:136...
    一分钟教你"广西微乐... 大家好,今天小编来为大家解答广西微乐小程序辅助器这个问题咨询软件客服可以免费测试直接加微信(1367...
    必看攻略"禅游游戏辅... 禅游游戏辅助 无需打开直接搜索微信:136704302本司针对手游进行,选择我们的四大理由: 1、软...
    科普分享"新道游辅助... 新道游辅助器免费版开挂教程视频分享装挂详细步骤在当今的网络游戏中,新道游辅助器免费版作为一种经典的娱...
    玩家亲测"奇迹手游辅... 玩家亲测"奇迹手游辅助脚本平台免费"开挂(安装)辅助安装有挂猫腻-黑科技教程您好:奇迹手游辅助脚本平...
    透视能赢"丽水都莱智... 透视能赢"丽水都莱智能辅助神器"开挂(透视)辅助透视有挂工具-2026新版教程;无需打开直接搜索薇:...
    透视有挂"星悦辅助神... 大家好,今天小编来为大家解答星悦辅助神器这个问题咨询软件客服可以免费测试直接加微信(13670430...
    教学盘点"星悦辅助神... 教学盘点"星悦辅助神器"开挂(下载)辅助下载有挂细节-必胜教程您好:星悦辅助神器这款游戏可以开挂,确...