Я не могу использовать JSON, чтобы сделать запрос Post на мой веб-API с помощью реагировать - PullRequest
0 голосов
/ 04 октября 2018

Я создал webapi в ASP.NET Core, и мне нужно использовать его с помощью React, веб-API работает нормально, если я использую curl или почтальон среди других, он работает нормально.Проблема начинается, когда я собираюсь использовать React, когда я пытаюсь сделать какие-либо запросы для моего API с js из проблемы.

Чтобы еще больше усложнить ситуацию, когда я делаю запрос для других API, он работает нормальноэто заставило меня поверить, что проблема была в моем API, но, как я уже сказал, он работает с другими только с той реакцией, которой нет.Я пробовал это разными способами.

API работает на IIS в моей локальной сети

Пути попыток

Использование Ajax

$ .ajax ({
    method: "POST",
    url: 'http://192.168.0.19:5200/api/token',
    beforeSend: function (xhr) {
      xhr.setRequestHeader ("Content-type", "application / json");
    },
    date: {
      name: 'name',
      password: 'password'
    },
    success: function (message) {
        console.log (message);
    },
    error: function (error) {
        / * if (error.responseJSON.modelState)
            showValidationMessages (error.responseJSON.modelState); * /
            console.log (error);
    }
  });

Использование Fetch

const headers = new Headers ();
    headers.append ('Content-Type', 'application / json');

    const options = {
      method: 'POST',
      headers,
      body: JSON.stringify (login),
      mode: 'cors' // I tried with cors and no-cors
    }

    const request = new Request ('http://192.168.0.19:5200/api/token', options);
    const response = await fetch (request);
    const status = await response.status;
    console.log (response); * /
    // POST adds a random id to the object sent
    fetch ('http://192.168.0.19:5200/api/token', {
    method: 'POST',
    body: JSON.stringify ({
      name: 'name',
      password: 'password'
     }),
    headers: {
      "Content-type": "application / json; charset = UTF-8"
    },
    credentials: 'same-origin'
    })
  .then (response => response.json ())
  .then (json => console.log (json))

Использование запроса

var request = new XMLHttpRequest ();
    request.open ('POST', 'http://192.168.0.19:5200/api/token', true);
    request.setRequestHeader ('Content-Type', 'application / json; charset = UTF-8');
    request.send (login);

ОШИБКИ

Консоль enter image description here

Вкладка "Сеть" enter image description here

Когда я делаю это без изменения типа контента на JSON, он работает, потому что API возвращает сообщение о том, что этонедопустимый тип.

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Попробуйте вот так

 public void ConfigureServices(IServiceCollection services)
 { 
     services.AddCors();
 }

 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
 {
        app.UseCors(option => option.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod().AllowCredentials());

        app.UseAuthentication();
        app.UseMvc();
 }
0 голосов
/ 14 августа 2019

Ну, у меня была та же проблема, и, кажется, вам нужно добавить действие к атрибуту HttpPost в контроллере.

Вот пример.

    [HttpPost("[action]")]
    public void SubmitTransaction([FromBody] SubmitTransactionIn request)
    {
        Ok();
    }

Если кто-нибудь знает почему, помогите представить более полный ответ.

0 голосов
/ 04 октября 2018

Помимо разрешения CORS в вашей конфигурации .NET.Вам также нужно вернуть 200 OK для всех запросов OPTION.

Не уверен, как это делается в .NET, но просто создайте промежуточное ПО, которое определяет МЕТОД запроса, и, если это ОПЦИИ, завершите запрос прямо здесь.со статусом 200.

...