При отправке больших данных в виде строки запроса появляется ошибка «Ошибка HTTP 414. URL-адрес запроса слишком длинный» - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь отправить массив идентификаторов на сторону сервера (контроллера) из представления бритвы MVC, но когда число идентификаторов превышает 2000 в качестве длины строки запроса, я получаю следующую ошибку, и процесс останавливается.

Я пытался отправить данные, используя метод POST, но я получил ошибку.Последний снимок экрана - это ошибка, которую я получил, используя метод POST.

enter image description here

Я вставил сюда свою серверную часть и код Jquery.

Код серверной стороны enter image description here

КОД JQUERY

Процесс 1: Обычный метод

enter image description here

Процесс 2: Альтернативный метод отправки данных с использованием метода POST enter image description here

enter image description here

public void ExportPageStatusHistory(string[] PrescriptionIds)
            {
                ExcelPackage excel = new ExcelPackage();
                var fileName = "PageStatusHistoryReport_" + DateTime.Now.ToStr();
                var workSheet = excel.Workbook.Worksheets.Add(fileName);
                var lst = string.Join(",", PrescriptionIds);
                var result = PharmacyReferralService.GetPageASPNHistory(lst);
                if (result.Count > 0)
                {
                    workSheet.Cells[1, 1].LoadFromCollection(result, true);
                    workSheet.Cells.AutoFitColumns();
                    workSheet.Cells["A1:Z1"].Style.Font.Bold = true;
                    workSheet.Column(6).Width = 35;
                    workSheet.Column(7).Width = 35;

                    using (ExcelRange col = workSheet.Cells[2, 6, 1 + result.Count, 6])
                    {
                        col.Style.Numberformat.Format = "yyyy-MM-dd hh:mm AM/PM";
                        col.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                    }
                    using (ExcelRange col = workSheet.Cells[2, 7, 1 + result.Count, 7])
                    {
                        col.Style.Numberformat.Format = "yyyy-MM-dd hh:mm AM/PM";
                        col.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                    }

                    using (var memoryStream = new MemoryStream())
                    {
                        Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                        Response.AddHeader("content-disposition", "attachment;  filename=" + fileName + ".xlsx");
                        excel.SaveAs(memoryStream);
                        memoryStream.WriteTo(Response.OutputStream);
                        Response.Flush();
                        Response.End();
                    }
                }
            }


 Jquery Code:

    function ExportPrescriptionStatusHistory() {
            $('#tbl_PrescriptionsDrugReport tbody tr td:nth-child(1)').each(function () {
                items.push($(this).find("a").attr("data-id"));
            });

            @*var url = '@Url.Action("ExportPageStatusHistory", "Common")?PrescriptionIds=' + items;
            location.href = url;*@

            var url = '@Url.Action("ExportPageStatusHistory", "Common")';
            $.ajax({
                url: url,          
                type: "POST",           
                data: { PrescriptionIds: items },           
                async: false,          
                success: function(response){                                       
                },
                error:function(xhr, ajaxOptions, thrownError)
                {
                    alert(xhr.responseText);
                    ShowMessage("Error", "fail");
                }
            });
        }

1 Ответ

0 голосов
/ 26 сентября 2018

вы не отправляли данные в параметре пути URL.Пожалуйста, отправьте его в теле запроса.так что, только идея.Потому что браузер ограничил длину URL, максимальная ~ 2000 байт.

например.

Код сервера:

public void updateData([FromBody] string[] data) {
    //...
}

Код клиента

$.ajax({
    type: "POST",
    url: "/server",
    data: JSON.stringify(data),
    contentType: "application/json", 
    datatype: "html",
    success: function (data) {
        $('#result').html(data);
    }
});

Я только JAVA, я думаю, что C # то же самое.пожалуйста, смотрите больше Какова максимальная длина URL в разных браузерах?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...