繁体   English   中英

C# Console application wont post large dataset to asp.net .net core 3.0 web api

[英]C# Console application wont post large dataset to asp.net .net core 3.0 web api

我正在努力完成控制台应用程序的最后一步。 我有一个帖子 function 发布了一个汽车品牌,包括模型、世代、修改和汽车数据。 正如您可以想象的那样,这是一个大型数据集。 较小的品牌发送没有问题,但是当我来到像奥迪、宝马和梅赛德斯这样的大品牌时,我的应用程序不会发布。

这是发送数据的控制台应用程序代码

private static async Task PostDataSet(List<Brand> DataSet)
    {

        string key = Api_Key;
        if (key == null || key == "")
        {
            Console.WriteLine("No key set");
            Console.ReadKey();
            return;
        }
        Console.WriteLine("Posting a batch with " + DataSet.Count + " items :" + DataSet[0].Name);
        try
        {
            using (var wb = new WebClient())
            {
                var data = new NameValueCollection();
                data["Key"] = Api_Key;
                data["Dataset"] = JsonConvert.SerializeObject(DataSet).ToString();
                data["HostIp"] = Hostip;
                string ResponseString = "";
                if (UseLive)
                {
                    Uri x = new Uri(LiveUrl + "/Api/FullApiUpdate");
                    var response = await wb.UploadValuesTaskAsync(x, "POST", data);
                    ResponseString = Encoding.UTF8.GetString(response);
                    Console.WriteLine(ResponseString);
                }
                if (!UseLive)
                {
                    Uri x = new Uri(localurl + "/Api/FullApiUpdate");
                    var response = await wb.UploadValuesTaskAsync(x, "POST", data);
                    ResponseString = Encoding.UTF8.GetString(response);
                    Console.WriteLine(ResponseString);
                }
                if (ResponseString == "No api key specified" || ResponseString == "Invalid Api Key" || ResponseString == "Received null")
                {
                    Console.WriteLine("Api posted a cancellation token : " + ResponseString);
                    Console.ReadKey();
                }
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("Error posting to api");
            Console.WriteLine(e.InnerException);
        }

    }

一切都适用于小品牌,但就像我之前告诉你的大品牌一样。 服务器端 api 动作看起来像这样

public async Task<string> FullApiUpdate(string Dataset , string HostIp, string Key)
    {
        Console.WriteLine("API KEY ACCESED THIS ACTION : " + Key);
        Console.WriteLine("IP ACCESED THIS ACTION : " + HostIp);

        if (Key == null || Key == "")
        {
            return "No api key specified";
        }

        if (await _context.Api_Keys.Where(x=>x.Key == Key && x.Active == true).FirstOrDefaultAsync()==null)
        {
            return "Invalid Api Key";
        }

        if (Dataset != null || Dataset.Count() != 0)
        {
            List<Brand> FullSet = JsonConvert.DeserializeObject<List<Brand>>(Dataset);
            if (FullSet.Count() != 0)
            {
                Console.WriteLine("Reveived a batch of " + FullSet.Count() + " items from : " + HostIp);
                await _context.AddRangeAsync(FullSet);
                await _context.SaveChangesAsync();
                return "Updated a batch of " + FullSet.Count() + " Items";
            }
        }
        return "Received null";
    }

我真的不知道 go 从这里到哪里 这是我拥有的控制台输出。 服务器:服务器控制台:控制台

我在我的创业公司里试过这个

services.Configure<FormOptions>(x =>
        {
            x.BufferBody = false;
            x.KeyLengthLimit = 2048; // 2 KiB
            x.ValueLengthLimit = 4194304; // 32 MiB
            x.ValueCountLimit = 2048;// 1024
            x.MultipartHeadersCountLimit = 32; // 16
            x.MultipartHeadersLengthLimit = 32768; // 16384
            x.MultipartBoundaryLengthLimit = 256; // 128
            x.MultipartBodyLengthLimit = 134217728; // 128 MiB
        }); 

我搜索了多个论坛,但没有一个对我有用。 欢迎任何帮助

我通过将大小增加到 int.maxvalue 来解决我的问题

services.Configure<FormOptions>(x =>
        {
            x.BufferBody = false;
            x.KeyLengthLimit = int.MaxValue; // 2 KiB
            x.ValueLengthLimit = int.MaxValue; // 32 MiB
            x.ValueCountLimit = int.MaxValue;// 1024
            x.MultipartHeadersCountLimit = int.MaxValue; // 16
            x.MultipartHeadersLengthLimit = int.MaxValue; // 16384
            x.MultipartBoundaryLengthLimit = int.MaxValue; // 128
            x.MultipartBodyLengthLimit = int.MaxValue; // 128 MiB
        });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM