C # в Javascript: что эквивалентно `new MultipartFormDataContent ();`

1

У меня есть этот унаследованный код С# (я не знаю С#), и мне нужно написать те же функции в 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
});

Если вам нужна дополнительная информация или у вас есть вопросы или предложения по улучшению этой должности, прокомментируйте! Спасибо за вашу помощь!

Теги:

2 ответа

0
Лучший ответ

Если я правильно помню, Content-Type - это post, чтобы быть multipart/form-data; однако, есть улов.

Тип содержимого данных формы имеет границу в конце.

То, что делают мои коллеги, просто не определяет Content-Type, и пусть оно будет автоматически определено. Таким образом, у него будет правильная граница.

На другой ноте. Если вы только отправляете JSON; то, если это возможно, вы не должны использовать данные формы; но, скорее, json. Данные формы действительно необходимы только в том случае, если вы пытаетесь отправить несколько типов данных. Такие как текст и изображение одновременно.

  • 0
    Отметьте это как корректный, потому что API действительно ожидает объект FormData и явно удаляет заголовок Content-Type перед отправкой запроса, чтобы браузер w мог установить это свойство автоматически, работает. Спасибо!
1

Почему вы создаете объект 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".

  • 0
    Лучше не задавать вопросы в ответах (особенно когда это может показаться саркастичным). И это было именно то, о чем я думал. :-)
  • 0
    Это весь content = new MultipartFormDataContent(); и content.Add(stringContent, item_1.GetType().Name); это заставило меня подумать, что есть дополнительный шаг, который важен, чтобы получить право. Я сделал ранее, и снова только сейчас, попробуйте обычный JSON POST, а также multipart / form-data, но без кубиков ..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню