У меня есть этот унаследованный код С# (я не знаю С#), и мне нужно написать те же функции в Javascript (я очень хорошо знаю JS). Таким образом, код С#:
static JavaScriptSerializer serializer = new JavaScriptSerializer();
MultipartFormDataContent content = new MultipartFormDataContent();
item item_1 = new item
{
a = 'a',
b = 'b'
};
string jsonPayload = serializer.Serialize(item_1);
var stringContent = new StringContent(jsonPayload);
stringContent.Headers.ContentType.MediaType = "text/json";
content.Add(stringContent, item_1.GetType().Name);
// then it makes a network request
И если мне нужно было сделать все возможное, вот что я думаю, что это будет в JS, хотя я должен немного отбросить с тех пор, как api возвращает 415 Unsupported Media Type:
const item_1 = {
a: 'a',
b: 'b'
};
const jsonPayload = JSON.stringify(item_1);
const formData = new FormData();
formData.set('data', jsonPayload);
fetch('/some_api/endpoint',{
headers: {
"Content-Type":"text/json"
},
method: 'POST',
body: formData
});
Если вам нужна дополнительная информация или у вас есть вопросы или предложения по улучшению этой должности, прокомментируйте! Спасибо за вашу помощь!
Если я правильно помню, Content-Type - это post, чтобы быть multipart/form-data; однако, есть улов.
Тип содержимого данных формы имеет границу в конце.
То, что делают мои коллеги, просто не определяет Content-Type, и пусть оно будет автоматически определено. Таким образом, у него будет правильная граница.
На другой ноте. Если вы только отправляете JSON; то, если это возможно, вы не должны использовать данные формы; но, скорее, json. Данные формы действительно необходимы только в том случае, если вы пытаетесь отправить несколько типов данных. Такие как текст и изображение одновременно.
Почему вы создаете объект FormData? Я думаю, вы хотите просто отправить содержимое как JSON;
const item_1 = {
a: 'a',
b: 'b'
};
const jsonPayload = JSON.stringify(item_1);
fetch('/some_api/endpoint',{
headers: {
"Content-Type":"text/json"
},
method: 'POST',
body: jsonPayload
});
На этой странице документации (https://developer.mozilla.org/en-US/docs/Web/API/FormData) кажется, что это не будет тип содержимого JSON;
Он использует тот же формат, который форма использовала бы, если для типа кодировки были установлены "multipart/form-data".
content = new MultipartFormDataContent();
и content.Add(stringContent, item_1.GetType().Name);
это заставило меня подумать, что есть дополнительный шаг, который важен, чтобы получить право. Я сделал ранее, и снова только сейчас, попробуйте обычный JSON POST, а также multipart / form-data, но без кубиков ..
Content-Type
перед отправкой запроса, чтобы браузер w мог установить это свойство автоматически, работает. Спасибо!