Я пытаюсь сделать AXIOS.post в приложении Vue.JS. Кажется, что когда я набираю более 1500 символов, процесс завершается сбоем. То, что я имею в виду под ошибкой, даже не переходит к веб-API. Он идет прямо в область ошибки. Обычно это функция, которая вызывает веб-API .Net, который создает документ MS Word и передает его обратно конечному пользователю.
let pm = "1234567890,"
Создайте цикл, чтобы добавить pm = pm + pm '200 раз
let updatedData = {
memberID: 12345,
pmids: pm
};
axios({
method: "post",
url:
"http://localhost:54269/api/DataTable/PostValue",
params: {
value: JSON.stringify(updatedData)
}, responseType: 'blob' ,
maxContentLength: Infinity,
maxBodyLength: Infinity,
headers: {
'content-type': 'application/json',
'Accept': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
}
}).then(response =>{
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'DataTable4_.docx');
document.body.appendChild(link);
link.click();
})
.catch(err => {
if ( err.response ){
console.info(err.response.data);
}
if ( err.message ){
console.info("message: " + err.message);
}
});
} ,
Как только PM превысит 1500, я получаю сообщение об ошибке
POST http://localhost:54269/api/DataTable/PostValue?value=%7B%22memberID%22:12345,%22pmids%22:%2212345,23456,45678%22%7D 500 (Internal Server Error)
dispatchXhrRequest @ xhr.js?e38e:177
xhrAdapter @ xhr.js?e38e:13
dispatchRequest @ dispatchRequest.js?c09c:52
Promise.then (async)
request @ Axios.js?108a:61
wrap @ bind.js?784f:9
saveSwitchValue @ reporterAPI_Unique_PI.vue?5e84:382
create_word_doc_post @ reporterAPI_Unique_PI.vue?5e84:451
toolbarClick @ reporterAPI_Unique_PI.vue?5e84:816
Observer.notify @ observer.js?e8e3:99
Base.trigger @ base.js?3f78:181
GridComponent.trigger @ grid.component.js?9a24:85
Toolbar.toolbarClickHandler @ toolbar.js?3c15:337
Observer.notify @ observer.js?e8e3:99
Base.trigger @ base.js?3f78:181
Toolbar.clickHandler @ toolbar.js?4b00:573
reporterAPI_Unique_PI.vue?5e84:409
Blob {size: 1151, type: 'application/json'}size: 1151type: "application/json"[[Prototype]]: BlobarrayBuffer: ƒ arrayBuffer()size: (...)slice: ƒ slice()stream: ƒ stream()text: ƒ text()type: (...)constructor: ƒ Blob()Symbol(Symbol.toStringTag): "Blob"get size: ƒ size()get type: ƒ type()[[Prototype]]: Object
Я должен иметь возможность взять достаточное количество данных, использовать JSON.stringify и отправить их на сервер, не так ли? Я не говорю о загрузке гигабайт данных, даже не о мегабайтах. Если кто-то знает какой-то экспертный учебный материал, я готов учиться. Я пробовал Udemy и YouTube, но 99% всех постов Axios — это небольшие образцы. Или да, я также проверил свой локальный сервер IIS и установил для Максимально допустимой длины содержимого значение 10737418241073741824.
и если вы хотите
<System.Web.Http.HttpPost> <System.Web.Http.Route("api/DataTable/PostValue")> Публичная функция PostValue (значение ByVal как строка) как строка 'HttpResponseMessage
Строка для тестирования
Подождите, вы передаете эти данные как параметр запроса? У вас есть данные в параметрах, а не в теле.
Ваша проблема в том, что вы пытаетесь передать этот большой строковый объект JSON как параметр запроса. IIS имеет жесткое ограничение в 2048 байтов для длины URL-адреса.
Большие объекты данных должны передаваться как часть тела запроса, искомое свойство — data
. Дополнительные сведения см. в документации Axios.
Я согласен, и кажется, что AXIOS действительно не рассчитан на более чем 2048 байт. Я пробовал все: от параметров до данных, от сообщений до получения, от json до application/x-www-form-urlencoded, от FormData до всего, что между ними. Если это не AXIOS, это .NET Web API. AJAX и jQUery были намного проще для публикации данных. Ну это моя первая ошибка. Я предполагаю, что Posting отправляет на сервер, а Get тянет. Может записать в файл - загрузить - прочитать - и обработать. Не настоящий профессионал
Какие результаты вы получаете, когда пытаетесь опубликовать данные в формате JSON. Опять же, Axios отлично отправляет ваши запросы, проблемы возникают на вашем сервере.
У меня есть точка останова прямо на имени контроллера - Public Function PostValue (ByVal value As String) As String, и если обновленные данные меньше 2040, я могу видеть значения в строке и точка останова. Если данные слишком велики, они вообще не попадают в контроллер, а просто поражают обработчик ошибок AXIOS с сообщением: Запрос не выполнен с кодом состояния 404. И он отправляет все данные в строке URL-адреса локальный: 54269/API/DataTable/PostValue?значение={"memberID":12 345,"pmids":"12345,23456,45678,12345,...........,23456,45678"}
Хорошо, но что произойдет, если вы отправите его в тело, а не в URL? axios-http.com/docs/post_example. Если вы отправите данные через параметр URL, IIS потерпит неудачу, прежде чем он попадет в ваше приложение. Опять же, проблема не с аксиомами, это отправка данных в качестве параметра запроса и IIS.
Извините за задержку - я очень ценю вашу помощь. Задержка была с моей стороны, потому что независимо от того, что я делал, я получил ошибку CORS из моего локального. Пришлось развернуть учетную запись AZURE, и она отлично работает с тестовым кодом. Я получил длину строки более 25 КБ, что доказывает, что она работает. Теперь мне нужно решить локальную проблему CORS, чтобы упростить отладку кода. Спасибо
Увеличьте длину — теперь 1 343 447 символов.
Если вы получаете 500, это означает, что ваш серверный код (или, возможно, прокси-сервер между вашим клиентом и сервером) не работает. Не могу сказать вам, что, не видя вашего кода на стороне сервера, но проблема не в Axios.