Невозможно получить ответ от конечной точки основного контроллера asp.net в ответной реакции - PullRequest
0 голосов
/ 29 мая 2019

Я новичок в ASP.NET Core и React js.Я не могу получить ответ в React от конечной точки контроллера ASP.NET.Весь код на бэкэнде выполняется от начала до обратной строки ответа и получает данные на обратной линии, но в ответ на реакцию js я не могу увидеть данные.

Я пытался:

  public void ConfigureServices(IServiceCollection services)
        {

            services.AddMvc(options =>
            {
                options.InputFormatters.Add(new BypassFormDataInputFormatter());
                options.RespectBrowserAcceptHeader = true;
                options.InputFormatters.Add(new BypassFormDataInputFormatter());
                options.OutputFormatters.Add(new XmlSerializerOutputFormatter());
      }).AddXmlSerializerFormatters().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

это мой интерфейс:

getRecordsByPaging = (pagingData) => {
    debugger
    var jsonData = JSON.stringify(pagingData);
    return fetch('/get-products', {
        method: 'POST',
        body: jsonData,
        headers: {
            'Content-Type': 'application/json',
            'Accept': 'application/json'
        }
    }).then(res => {
        return res;
    }).catch(err => err);
}

это мой бэкэнд:

    [HttpPost]
    [Route("get-products")]
    public async Task<IActionResult> GetCustomers([FromBody] req)
    {
        try
        {
            if (!ModelState.IsValid)
            {
                return null;
            }
            var response = await _productSvc.GetProducts(req);
            if (response == null)
            {
                return null;
            }

            return Ok(response);

        }
        catch (Exception e)
        {
            return null;
        }


    }

Я не знаю, что делаю не так.

IЯ получаю от JS:

body: (...)
bodyUsed: false
headers: Headers {}
ok: true
redirected: false
status: 200
statusText: ""
type: "basic"
url: "https://localhost:44384/get-products"
__proto__: Response

1 Ответ

0 голосов
/ 29 мая 2019

Вам необходимо прочитать фактический ответ на ваш запрос ajax:

getRecordsByPaging = (pagingData) => {
    var jsonData = JSON.stringify(pagingData);
    return fetch('/get-products', {
        method: 'POST',
        body: jsonData,
        headers: {
            'Content-Type': 'application/json',
            'Accept': 'application/json'
        }
    })
    .then(r => r.json())
    .then(res => {
        return res;
    }).catch(err => err);
}

Как видите, добавленная строка - .then(r => r.json()), которая фактически получит ответ JSON на ваш запрос.

Подробнее о fetch api можно узнать по адресу https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

Базовая выборка:

Базовый запрос на выборку действительно прост в настройке. Посмотрите на следующий код:

fetch('http://example.com/movies.json')
  .then(function(response) {
    return response.json();
  })
  .then(function(myJson) {
    console.log(JSON.stringify(myJson));
  });

Здесь мы выбираем файл JSON по сети и печатаем его в консоль. Самое простое использование fetch () принимает один аргумент - путь на ресурс, который вы хотите получить - и возвращает обещание, содержащее ответ (объект Response).

Конечно, это всего лишь HTTP-ответ, а не фактический JSON. к извлечь содержимое тела JSON из ответа, мы используем json () метод (определенный в миксине тела, который реализуется как Объекты запросов и ответов.)

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