Чем отличается мой вызов Ajax от XMLHttpRequest, который позволяет моему серверу понимать Ajax, но не XMLHttpRequest?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Чем отличается мой вызов Ajax от XMLHttpRequest, который позволяет моему серверу понимать Ajax, но не XMLHttpRequest?

Сообщение Anonymous »

У меня есть очень простой вызов сервера:

Код: Выделить всё

[HttpPost]
[AllowAnonymous]
public JsonResult Test(TestRequestModel requestModel)
{
//do stuff
return Json(new { result.Success });
}
Моя TestRequestModel выглядит так:

Код: Выделить всё

public class TestRequestModel
{
public string Email { get; set; } = string.Empty;
}
Я пытаюсь отправить POST-запрос на сервер. Но по сложному списку причин мне нужно использовать XMLHttpRequest вместо $.ajax. Для этого я собираюсь показать вам, как я это сделал в ajax, а затем как я сделал это с помощью XMLHttpRequest.
Во-первых, вот как я вызываю свой сервер:

Код: Выделить всё

function MyTestFunction() {
let parameters = {
Email: "test@test.com"
}

CallServer(function () {
//Do stuff
}, function () {
//Do other stuff
}, "/Home/Test", parameters)
}
Аякс:

Код: Выделить всё

function CallServer(resolve, reject, path, parameters) {
$.ajax({
type: "POST",
url: path,
data: AddAntiForgeryToken(parameters),
success: function (response) {
//do stuff
},
error: function (xhr) {
//do stuff
},
complete: function () {
//do more stuff
}
});
}
Способ XMLHttpRequest:

Код: Выделить всё

function CallServer(resolve, reject, path, parameters) {
let xhr = new XMLHttpRequest();

xhr.open("POST", path, true);
xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xhr.setRequestHeader('RequestVerificationToken', GetMyToken());
xhr.onreadystatechange = function (e) {
if (xhr.readyState === XMLHttpRequest.DONE) {
if (xhr.status === 200 || xhr.status === 201) {
//do stuff
}
else {
//do other stuff
}
}
};

xhr.send(JSON.stringify(parameters));
}
Если я запускаю приведенный выше код с помощью ajax, он работает без проблем. Если я попытаюсь сделать это способом XMLHttpRequest, моя модель запроса будет создана, но поле электронной почты не будет заполнено. Теперь я обнаружил, что могу решить эту проблему, добавив [FromBody] в модель запроса, и это работает, я протестировал и никаких проблем.
Кроме того, как я читал в Интернете и, надеюсь, понял правильно , но ajax использует XMLHttpRequest скрытно, верно?
Так почему же мне нужно добавить [FromBody] на свой контроллер, чтобы это работало? Есть ли способ изменить свой XMLHttpRequest, чтобы он не был нужен? Решение, которое я ищу, как не указывать [FromBody] в запросе на отправку json на главный сервер .net.

Подробнее здесь: https://stackoverflow.com/questions/790 ... r-understa
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»