WordPress не может AJAX для веб-приложения ASP.NET.Core на той же машине - PullRequest
0 голосов
/ 27 апреля 2018

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

У нас есть виртуальная машина (Ubuntu 16.04), на которой работает сервер WordPress. На этой же виртуальной машине также работает веб-приложение ASP.NET.Core.

Обычно, когда кто-то заполняет форму на нашем веб-сайте WordPress, мы отправляем пользовательский ввод через AJAX на маршрут через наш веб-API (который затем отправляет сообщения RabbitMQ с данными, но это не важно).

Контроллер веб-приложений:

[Route("api/[controller]")]
public class ValuesController : Controller
{
    [HttpPost("reservation")]
    public int Create([FromBody]MyForm f)
    {
        //Send RabbitMQ messages with form data
    }
}

AJAX-код в WordPress:

jQuery.ajax({
    dataType: "json",
    method: "post",
    data: jQuery("#myForm").serialize(),
    url: "http://localhost:65443/api/values/reservation",
    succes: function()
    { console.log("Success"); }
});

Когда я запускаю веб-приложение с dotnet run, оно говорит, что оно прослушивает localhost:65443, и я могу прекрасно «взаимодействовать» с моим веб-API с помощью curl commando.

Но отправка формы в WordPress регистрирует эту ошибку: Failed to load resource: net::ERR_CONNECTION_REFUSED. Я не понимаю, WordPress работает на той же машине, что и веб-приложение, поэтому отправка AJAX-запроса на localhost:65443 должна работать нормально, как curl commando: (

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

В вашем методе Web API удалите [FromBody], так как это заставит Web API читать тип MyForm из тела запроса как JSON, и вы публикуете FormData Content-Type: application/x-www-form-urlencoded; charset=UTF-8

[Route("api/[controller]")]
public class ValuesController : Controller
{
    [HttpPost("reservation")]
    public int Create(MyForm f)
    {
        //Send RabbitMQ messages with form data
    }
}

Кроме того, вам необходимо убедиться, что поддержка CORS настроена в вашем проекте Web API.

Чтобы настроить поддержку CORS на глобальном уровне, сначала установите пакет CORS

Install-Package Microsoft.AspNetCore.Cors

В методе ConfigureServices в startup.cs добавьте службы CORS.

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

А затем откройте файл Startup.cs в корневой папке и добавьте приведенную ниже конфигурацию в начале метода Configure.

app.UseCors(builder => builder.WithOrigins("http://localhost:5901").AllowAnyMethod());

http://localhost:5901 >> должен ссылаться на ваш сайт WordPress.

А в методе ConfigureServices на startup.cs добавьте службы CORS.

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

Проверка Включение перекрестных запросов (CORS) в ASP.NET Core для получения дополнительной информации

0 голосов
/ 27 апреля 2018

Модуль связывания по умолчанию не знает, как связать сериализованную форму myForm с классом MyForm.

Не могли бы вы создать данные JSON вручную и отправить как JSON? Э.Г.

var data = { firstName: txtFirstName.val() };
              ^^^^^^
      Property inside MyForm class


$.ajax({
    type: 'POST',
    url: 'http://localhost:65443/api/values/reservation',
    dataType: 'json',
    data: JSON.stringify(data),
    contentType: 'application/json; charset=utf-8',
    success: function(result) {
        console.log(result);
    }
});
...